作者:手机用户2502859733 | 来源:互联网 | 2023-09-14 00:31
假设我有一个数组a
,并且想要将其第一个元素分配给变量x
,并将其第二个元素分配给变量y
。 Ruby为我(至少)提供了两种可能性:
x,y = a
或
x,y = *a
除了我个人认为第二种形式(即使用显式飞溅运算符)更合乎逻辑之外,两者之间是否还有区别?更准确地说,在某些情况下(可能取决于a
的实际情况),这两个变体的行为可能不同,并且有理由偏爱另一个变体吗?
更准确地说,在某些情况下(可能取决于a
的实际情况),这两个变体的行为可能不同,并且有理由偏爱另一个变体吗?
差别很小。前者尝试调用to_ary
(隐式转换),而后者尝试调用to_a
(由于*
而进行的显式转换):
a = Object.new
def a.to_ary
[1,2,3]
end
def a.to_a
[:a,:b,:c]
end
x,y = a
p x: x,y: y
#=> {:x=>1,:y=>2}
x,y = *a
p x: x,y: y
#=> {:x=>:a,:y=>:b}
但是,如果a
是一个数组,则两者之间没有区别。