Я изучаю Руби в данный момент, и я столкнулся с этой странной ситуацией.Почему я получаю ошибку «Неожиданная *» при использовании оператора * (звездочка) в качестве параметра метода?
Когда я запускаю следующий код, я получаю вывод, показанный ниже.
Рабочий код:
def hello(a,b=1,*c,d,e,f)
p a,b,c,d,e,f
end
hello(1,2,3,4,5)
Рабочий код выхода:
1
2
[]
3
4
5
Однако при редактировании кода, так что параметр 'е' улов всех параметров, я получаю ошибка, показанная ниже.
В противном случае код:
def hello(a,b=1,c,d,*e,f)
p a,b,c,d,e,f
end
hello(1,2,3,4,5)
При отсутствии кода выхода:
a.rb:1: syntax error, unexpected *
def hello(a,b=1,c,d,*e,f)
^
a.rb:1: syntax error, unexpected ')', expecting '='
a.rb:3: syntax error, unexpected keyword_end, expecting end-of-input
Я использую рубин 2.3.1p112 (2016-04-26 ревизии 54768) на Ubuntu.
Мне интересно узнать, почему второй фрагмент кода не работает.
Edit:
Следующий код не так.
def hello(a,b=1,c,d,e,*f)
p a,b,c,d,e,f
end
hello(1,2,3,4,5)
И я получаю подобную ошибку
a.rb:1: syntax error, unexpected *
def hello(a,b=1,c,d,e,*f)
^
a.rb:3: syntax error, unexpected keyword_end, expecting end-of-input
Использование оператора splat не в конце для меня не имеет смысла. – fl00r
Правда. Это не читаемо, но его можно разобрать, но Ruby делает это в определенных случаях. –
@ fl00r Я попробовал следующее определение метода, и я получаю ту же ошибку. def hello (a, b = 1, c, d, e, * f) – Steve