11

との違いを理解しようとしてい*(1..9)ます[*1..9]

それらを変数に割り当てると、同じように機能します

splat1 = *(1..9)  # splat1 = [1, 2, 3, 4, 5, 6, 7, 8, 9]
splat2 = [*1..9]  # splat2 = [1, 2, 3, 4, 5, 6, 7, 8, 9]

しかし、私が直接使用しようとすると、物事は奇妙に*(1..9)なり[*1..9]ます。

*(1..9).map{|a| a.to_s}  # syntax error, unexpected '\n', expecting tCOLON2 or '[' or '.'
[*1..9].map{|a| a.to_s}  # ["1", "2", "3"...]

問題の一部はオペレーターの精度にあると思いますか?しかし、何が起こっているのか正確にはわかりません。*(1..9)使用できるものと同じものを使用できないのはなぜ[*1..9]ですか?

4

1 に答える 1

9

問題は、スプラットは左辺値としてのみ使用できること、つまり、何かが受け取る必要があることだと思います。

したがって*(1..9).map、スプラットの受信者がいないため、の例は失敗[*1..9].mapしますが、作成している配列がスプラットの受信者であるため、機能します。

更新:このスレッドに関するいくつかの詳細情報(特に最後のコメント):ruby splat演算子を使用することはどこで合法ですか?

于 2011-09-26T15:28:44.863 に答える