From: gotoken@... (GOTO Kentaro) Date: 2000-10-18T02:46:59+09:00 Subject: [ruby-talk:5646] Re: passing single or multiple strings. In message "[ruby-talk:5634] Re: passing single or multiple strings." on 00/10/17, Hugh Sasse Staff Elec Eng 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") #=> # 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