In message "[ruby-talk:5634] Re: passing single or multiple strings."
on 00/10/17, Hugh Sasse Staff Elec Eng <hgs / dmu.ac.uk> writes:
>> How about something(*["x", "y"]);
>>
>> def something(*bunch_of_args)
>> bunch_of_args
>> end
>>
>> p something(*["x", "y"]) #=> ["x", "y"]
>>
>
>Not tried it on a right hand side really....:
>
>irb(main):001:0> x = [[[2.3],4,[5,6]]]
>[[[2.3], 4, [5, 6]]]
>irb(main):002:0> *x
>SyntaxError: compile error
>(irb):2: parse error
>(irb):2:in `irb_binding'
>irb(main):003:0> p *x
>[[2.3], 4, [5, 6]]
>nil
>irb(main):004:0>
>
>Not sure why *x didn't work there... So is there a method corresponding
>to this * prefixing? Methods does show a "*" method for Array:
I would beg apologies for my answer not suitable :<
The leading "*" is NOT a method. It is a feature of Syntax, that is,
"*var" on a rhs or an argument is used for the multiple substitution.
One could use this syntax to pass the whole of argument to another
method;
class Foo
def initialize(obj)
@obj = obj
end
def method_missing(mid, *args, &blk)
@obj.send(mid, *args, &blk)
end
end
p foo = Foo.new("foo") #=> #<Foo:0x80fa2e4 @obj="foo">
p foo[1,2] #=> "oo"
So, this is not a direct answer for your questioin but is a solution.
On the other hand, Ruby would tries invoking "*obj.to_ary" when "*obj"
appears on a rhs or an argument and "to_ary" has to return an array as
its value.
class Foo
def to_ary; [1,2,3] end
end
a, b, c = *Foo.new.to_ary
p [a, b, c] #=> 1, 2, 3
Hope this helps,
-- gotoken