Понимание ruby splat в диапазонах и массивах

Я пытаюсь понять разницу между *(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]?

10
задан Andrew Grimm 26 September 2011 в 23:08
поделиться