这段代码似乎创建了一个范围从a到z的数组,但我不明白它的*作用.有人可以解释一下吗?
[*"a".."z"]
Run Code Online (Sandbox Code Playgroud)
Sim*_*tti 12
它被称为splat运算符.
飞溅左值
最多可以喷出一个左值,在这种情况下,它被分配一个由缺少相应左值的剩余右值组成的数组.如果最右边的左值被喷溅,那么它将消耗所有尚未与左值配对的右值.如果splatted左值跟随其他左值,它会消耗尽可能多的rvalues,同时仍然允许以下左值接收它们的rvalues.
Run Code Online (Sandbox Code Playgroud)*a = 1 a #=> [1] a, *b = 1, 2, 3, 4 a #=> 1 b #=> [2, 3, 4] a, *b, c = 1, 2, 3, 4 a #=> 1 b #=> [2, 3] c #=> 4空啪的一声
左值可以由唯一的星号(U + 002A)组成,没有任何相关的标识符.它的行为如上所述,但不是将相应的rvalues分配给splatted左值,而是丢弃它们.
Run Code Online (Sandbox Code Playgroud)a, *, b = *(1..5) a #=> 1 b #=> 5溅Rvalue
当一个rvalue被splatted时,它将被转换为一个带有Kernel.Array()的数组,其元素本身就变成了rvalues.
Run Code Online (Sandbox Code Playgroud)a, b = *1 a #=> 1 b #=> nil a, b = *[1, 2] a #=> 1 b #=> 2 a, b, c = *(1..2), 3 a #=> 1 b #=> 2 c #=> 3