[Note: parts of this message were removed to make it a legal post.]
Hi Richard,
The & has to be adjacent to "all" or "filename" to act as expected. The &
can mean one of two related things when you pass it to a method:
1. It can mean "pass the lambda expression that this variable points to into
a block". That makes the following to snippets equivalent:
# Snippet 1
filter_function = lambda {|x| x == 2 }
[1, 2, 3, 4, 2].select &filter_function
# Snippet 2
[1, 2, 3, 4, 2].select {|x| x == 2 }
2. It can mean "pass the instance method named by a symbol, and treat it as
a block".
That makes these two equivalent:
# Snippet 1
[1, 2, 3, 4, 2].select {|x| x.even? }
# Snippet 2
[1, 2, 3, 4, 2].select(&:even?)
So what my code is doing is calling the all method, for example, and that
method's sole job is to return a lambda that can then be passed in per the
above. You don't have to wrap the lambda in a method like I did. You could
also just say:
all = lambda {|x| x }
I hope that makes things a little clearer!
Cheers,
David
I checked out your Version 2. Added puts stuff and restriction to
names of files, which should probably be another one of your methods
instead of my hard-coding.
Expanded code:
http://www.pastie.org/1895917
Output:
http://www.pastie.org/1895932
I have only one question: I put a space between the & and the method
following it; the code broke. Is the construct you used documented on-
line somewhere? I've peeked at lambda documentation so I've got the
drift but I haven't used it in any of my code so far.
I copied your memo on the approach and plan to review it and use/
expand your code after I finish getting Russ Olson's code working or
giving up on it. To his credit, he posted his code on-line so I can
avoid typos and he included an apparently thorough set of unit tests.
So I've got a lot of studying to do.
Again, thanks for your guidance and great ideas,
Richard