在ruby,你可以这样做:
d = [1,2,3] a,b,c = d
a,b和c将分别接收值1,2和3.
d,在这种情况下,在Array中,ruby知道将其内容分配给a,b和c.但是,如果d是一个Fixnum,例如,只有一个将分配给d的值,而b和c将被分配为nil.
d的什么属性允许它用于多个赋值?在我到目前为止的探索中,我只能以这种方式使Array的子类的实例行为.
解决方法
这是一个非常无证的功能,我谨慎使用,但我们走了.从书中的Ruby编程语言:
When there are multiple lvalues and
only a single rvalue,Ruby attempts to
expand the rvalue into a list of
values to assign. If the value is an
array,Ruby expands the array so that
each element becomes its own rvalue.
If the value is not an array but
implements ato_ary
method,Ruby
invokes that method and then expands
the array it returns.
在Ruby 1.8中,这是to_ary方法,在Ruby 1.9文档中说它调用to_splat,但是我没有测试(在这台机器中没有1.9)它没有按预期的方式工作.所以,你必须在对象中定义一个to_ary方法.
class Week def to_ary %w(monday tuesday wednesday thursday friday saturday sunday) end end mon,tue,wed,thu,*weekend = Week.new
*%w(…)对于一系列单词是一个特殊的符号,如果你懒惰写[‘星期一’,’星期二’…]