我刚刚向 Ruby splat oprator 介绍了自己。我玩了很多方法。但是下面的实验不知何故让我想了两次:)
langs = ["java", "csharp", "ruby", "haskell" ]
# => ["java", "csharp", "ruby", "haskell"]
l1,*,l2 = *langs
# => ["java", "csharp", "ruby", "haskell"]
l1
# => "java"
l2
# => "haskell"
l1,*,*,l2 = *langs
SyntaxError: (irb):27: syntax error, unexpected tSTAR
l1,*,*,l2 = *langs
^
from /usr/bin/irb:12:in `<main>'
是的,错误很明显,因为我*(splat)
在同一个参数列表中使用了超过 1 个运算符。
现在我试着玩它。
l1,(*),(*),l2 = *langs
# => ["java", "csharp", "ruby", "haskell"]
啊!在这里有效。但不明白为什么会这样?
l1
# => "java"
l2
# => "haskell"
l1,(*),l2 = *langs
# => ["java", "csharp", "ruby", "haskell"]
l1
# => "java"
l2
# => "ruby"
从上面的示例中,它似乎正在跳过数组元素。
问题是:
(a) 运算符 (*) 叫什么?
(b) 当我在 splat(*) 中使用
l1,*,l2 = *langs
它时,它会消耗所有元素 -"csharp", "ruby"
。有什么方法可以从*
技术上查看那里的消耗量吗?显然,我正在使用 ifl1,*,l2 = *langs
not byl1,l*,l2 = *langs
。