[TxMt] Re: run_script.rb
Charles Turner
vze26m98 at optonline.net
Mon Aug 25 13:07:45 UTC 2008
On Mon, 25 Aug 2008 07:39:26 -0500, James Gray wrote:
>>> str.send(str.respond_to?(:lines) ? :lines, :to_s).map { … }
> You didn't read my code very well. Please scroll up and have another
> look. :)
Please forgive my ignorance of Ruby. I was confused by the comma after
:lines, which my Rubies complain about. I substituted a colon, but
maybe (again) that's not what you're trying to say?
I read your above as: "if the receiver responds to :lines, send :lines,
else send :to_s", which in 1.8's case is effectively a NoOp: a
conversion of a string to a string?
I do see now that :lines is a 1.9-only method, and so your test is a
smart one.
>> The next trick is sending a symbol. It looks like in 1.8 you can say
>> "a.send(:map)", but the equivalent "a.send(:each_line.to_a.map)" isn't
>> a valid symbol reference in Ruby.
>
> Those two pieces of code are not equivalent. In the first, you send()
> a Symbol message to the object. In the second, you are calling to_a()
> on a Symbol.
Thanks for the clarification/analysis of my (incorrect) code!
>> a.respond_to?(:map) ? a.map : a.each_line.to_a.map do |line| print
>> line
>> end
>>
>> which works for 1.9, but doesn't in 1.8
> Thus, in 1.9, it is legal to call map() without a block as you
> do above. The same is not legal in 1.8.
>
> Hope that answers some of your questions.
Again, thanks for the clarification/education.
Best, Charles
More information about the textmate
mailing list