Ruby スプラット オペレーターについて自己紹介しました。そして、私はそれでたくさん遊んだ。しかし、以下の実験はどういうわけか私にそれについて二度考えさせました:)
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)
同じ引数リストで複数の演算子を使用したため、エラーは明らかです。
今、私はそれで遊んでみました。
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"
。*
技術的に何が消費されているかを確認する方法はありますか? 明らかに、私は使用してl1,*,l2 = *langs
いない場合でも使用していl1,l*,l2 = *langs
ます。