在一些Ruby代码中看到类似的内容:
def getis;gets.split.map(&:to_i);end
k,=getis # What is this line doing?
di=Array::new(k){Array::new(k)}
答案 0 :(得分:14)
它使用Ruby的multiple assignment:
分配数组的第一个元素a, = [1, 2, 3]
a #=> 1
或者:
a, b = [1, 2, 3]
a #=> 1
b #=> 2
您可以使用*
来获取剩余的元素:
a, *b = [1, 2, 3]
a #=> 1
b #=> [2, 3]
或者:
*a, b = [1, 2, 3]
a #=> [1, 2]
b #=> 3
答案 1 :(得分:6)
它的工作原理如下。如果lhs
包含单个元素且rhs
具有多个值,则会为lhs
分配一个值数组,如下所示。
a = 1,2,3 #=> a = [1,2,3]
如果lhs
的元素多于rhs
,则lhs
中的多余元素将被丢弃
a,b,c = 1,2 #=> a = 1, b = 2, c = nil
因此
a, = 1,2,3 #=> a = 1
。其余的[2,3]被丢弃