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?
to_proc
on 07.03.2006 19:11
Re: to_proc
on 07.03.2006 19:24
I get the error "wrong argument type Symbol (expected Proc) (TypeError)", not undefined method.
Re: to_proc
on 07.03.2006 19:24
Ack, nevermind. I'm a silly person, ignore me.
Re: to_proc
on 07.03.2006 19:36
Hi -- On Wed, 8 Mar 2006, Brian Buckley wrote: > > What's happening? I'm only guessing but could it be flattening the outer array? David -- David A. Black (dblack@wobblini.net) Ruby Power and Light, LLC (http://www.rubypowerandlight.com) "Ruby for Rails" chapters now available from Manning Early Access Program! http://www.manning.com/books/black
Re: to_proc
on 07.03.2006 22:12
On Mar 7, 2006, at 1:09 PM, Brian Buckley wrote: > 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)
