On Sun, 24 Aug 2008 20:08:48 -0500, James Gray wrote:
We need something that works in both places, so we need to check for the new 1.9 method lines and map() over it instead, if present. The code would be something like:
str.send(str.respond_to?(:lines) ? :lines, :to_s).map { … }
Hope that helps.
Hi James-
Thanks for your suggestion. The solution is a bit tricky, though. I think I have to test for String's support of :map in 1.8, because :each_line is supported in both 1.8 and 1.9.
In 1.8, you can do: a.map but in 1.9, I think you have to do: a.each_line.to_a.map
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.
I rewrote your suggestion as:
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, I think because of the conditional's relation the "do" block.
Anyway, I'll keep working at it, and thanks again for the knowledge!
Best, Charles