2015-03-10 2 views
0

На самом деле я пытаюсь использовать третий параметр как метод, как получить и второй параметр как * р, но он выдает ошибкуРубин передачи нескольких параметров в методах

def ss(a,*b,method="GET") 
    puts a 
end 
ss("fff",98,"POST") 

выше код генерирует ошибку

li.rb:1: syntax error, unexpected '=', expecting ')' 
def ss(a,*b,method="GET") 
      ^
li.rb:1: syntax error, unexpected ')', expecting end-of-input 

Как заставить эту программу работать?

ответ

0

Вы должны сделать это:

def ss(a,method="GET", *b) 
puts a 
end 

Когда операторы восклицательный знак используется, чтобы принять несколько входов, он всегда должен быть последним параметром метода. Также метод может иметь только один параметр splat.

Благодаря Cary для ясного и хрустящего объяснения над тем, как использовать Splats:

В основном, это правило, что если это однозначно, это нормально - Рубин будет цифры его. Если, однако, вы добавляете переменную со значением по умолчанию на мой пример (def test(*a,b); p a; p b; end; test 1,2,3), он становится неоднозначным, поэтому Ruby будет жаловаться.

+0

Разбитый аргумент необязательно должен быть в конце: 'def test (* a, b); p a; p b; конец; тест 1,2,3' печатает '[1,2]' then '3'. –

+0

посмотрю. Я этого не знал. Я ударил это из своего ответа. Спасибо – shivam

+1

В принципе, правило состоит в том, что если это однозначно, все в порядке - Ruby выяснит это. Если, однако, вы добавляете переменную со значением по умолчанию к моему примеру, она становится неоднозначной, поэтому Ruby будет жаловаться. –

Смежные вопросы