On Mar 7, 2006, at 1:09 PM, Brian Buckley wrote:

> require 'facet/symbol/to_proc'
>
> [[1,2], [], [1,2,3]].map(&:length)  #line 1 Blows up re undefined  
> method
> length for Fixnum?
>
> ["ab", "", "abc"].map(&:length)  #line 2 => [2, 0, 3]  but this  
> works fine
>
> Why does the first line fail by trying to call method length on  
> Fixnum?
> Shouldn't it be calling length on Array (which is defined) and thus  
> return
> [2,0,3] ?  Note the next line behaves as I'd expect, but for Strings.
>
> What's happening?

I figured it out! I figured it out!

theorizing that to_proc was implemented thusly:

class Symbol
     def to_proc
           lambda { |obj, *args| obj.send(self, *args) }
     end
end

which would be fine, except, ba bum bum! you have an array of arrays!  
map or  each or someone is passing it via yield which is  
sending :length.to_proc.call two args which turns into 1.send 
(:length, 2)