В Ruby незаконно ли помещать "after-the-value-if-expression" внутри блока? - PullRequest
1 голос
/ 07 февраля 2011

Ошибка:

rescue_from 'NotAuthorizedException' do |exception|
    a = 'b' if true else 'c'
end

Нет ошибки:

rescue_from 'NotAuthorizedException' do |exception|
    a = 'b'
end

Я получаю ошибку: syntax error, unexpected keyword_else, expecting keyword_end

Я что-то упускаю из виду?Это происходит даже тогда, когда я добавляю скобки вокруг аргумента метода: rescue_from('NotAuthorizedException') ....

Обновление:

Что ж, sepp2k верен: синтаксис неверен. Однако , следующий метод приводит к тому, что object вызывается как исключение со значением 'a', по крайней мере, при запуске в моем приложении Rails.Я собираюсь попытаться создать воспроизводимую автономную программу, в которой этот синтаксис кажется действительным.

def test
  object = 'a' if true else 'b'
  raise object.to_yaml
end

Обновление 2:

Он работает вirb (без to_yaml), но отображается следующее предупреждение:

warning: else without rescue is useless

Обновление 3:

def test
  object = 'a' if true else 'b'
end

Это приводит к тому же предупреждению, но 'b'отображается.Я закончил копать!

1 Ответ

3 голосов
/ 07 февраля 2011
a = 'b' if true else 'c'

- недопустимый синтаксис в ruby, независимо от того, находится он в блоке или нет (вы, вероятно, думаете о python, где синтаксис допустим).Вам нужно либо использовать

a = if true then 'b' else 'c' end

, либо

a = true ? 'b' : 'c'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...