为什么
a = *(1..10)
=> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
但
*(1..10)
SyntaxError: unexpected '\n', expecting '.' or &. or :: or '['
(我以为它会返回与第一种情况相同的结果,但是它根本不会做任何赋值)。好奇地知道原因是否与红宝石有关,或更具体地说与splat(*
)有关
我不认为splat是一元运算符,只能单独使用/ w这样的表达式。
在方法调用中为参数赋值的语法:
def foo(a, b)
puts a
puts b
end
foo(*[:a, :b])
对于二传手,这意味着:
obj.my_attribute = *(1..10)
是糖的方法:
obj.my_attribute=(*1..10)
它也用于Array文字表达式中: [*1..10]
我发现它a = *(1..10)
起作用是因为它是局部变量赋值,但我感到有些惊讶,但也许Ruby会以相同的方式对待它。
*(1..10)
但是,绝对不是方法调用。您应该使用(1..10).to_a
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句