From: Charles Mills Date: 2004-08-04T02:53:56+09:00 Subject: Re: __call__ equivalent? On Aug 3, 2004, at 10:51 AM, Charles Mills wrote: > On Aug 3, 2004, at 10:31 AM, Kevin Howe wrote: > >> Does Ruby have an equivalent of Python's __call__ method? >> > Forgot to mention: 2.send '+', 3 #=> 5 > Not sure what Python's __call__ does, but ... > > meth.call(args, ...) => obj > meth[args, ...] => obj > > > Invokes the meth with the specified arguments, returning the method�s > return value. > m = 12.method("+") > m.call(3) #=> 15 > m.call(20) #=> 32 > > --------- > > prc.call(params,...) => obj > prc[params,...] => obj > > > Invokes the block, setting the block�s parameters to the values in > params using something close to method calling semantics. Generates a > warning if multiple values are passed to a proc that expects just one > (previously this silently converted the parameters to an array). > > For procs created using Kernel.proc, generates an error if the wrong > number of parameters are passed to a proc with multiple parameters. > For procs created using Proc.new, extra parameters are silently > discarded. > > Returns the value of the last expression evaluated in the block. See > also Proc#yield. > a_proc = Proc.new {|a, *b| b.collect {|i| i*a }} > a_proc.call(9, 1, 2, 3) #=> [9, 18, 27] > a_proc[9, 1, 2, 3] #=> [9, 18, 27] > a_proc = Proc.new {|a,b| a} > a_proc.call(1,2,3) > > > produces: > prog.rb:5: wrong number of arguments (3 for 2) (ArgumentError) > from prog.rb:4:in `call' > from prog.rb:5 > > >