Синтаксическая ошибка Ruby: синтаксическая ошибка, неожиданное '=', ожидание ')'

Я пытаюсь передать параметры по умолчанию в метод, но до сих пор не могу этого сделать. Я написал метод с подписью ниже.

def abc(a,b=22,c,d=55)
end

я получаю сообщение об ошибке для приведенного выше кода как «синтаксическая ошибка, неожиданное '=', ожидание ')'».

Если я заменю приведенный выше код кодом, показанным ниже, он будет работать нормально.

def abc(a,b=5,c)

end

в чем может быть причина этого??

Спасибо


person Sanjay Salunkhe    schedule 12.08.2014    source источник


Ответы (3)


Проблема, я думаю, в том, что происходит, когда вы передаете разное количество аргументов.

abc(1,2,3,4)
a=1, b=2, c=3, d=4

Совершенно ясно, какое должно быть задание.

Но как вы могли не установить второй параметр?

Это отсутствует второй или четвертый параметр? Что получает по умолчанию?

abc(m, t, z)

Как я мог пропустить второй параметр и оставить третий с полезным значением - параметр, который не получает значение по умолчанию?

Вы должны сгруппировать параметры по умолчанию вместе:

def abc(a=25, b=6, c, d)

or:

def abc(a, b, c=6, d=7)

и тогда поведение более предсказуемо.

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

person JezC    schedule 12.08.2014


Вы не можете смешивать аргументы по умолчанию/не по умолчанию таким образом.

Как Руби должен знать, что означает abc(1,2,3)? Вы предоставляете a,b,c или a,c,d? Что получает значение по умолчанию, b или d?

person meagar    schedule 12.08.2014