Я ожидаю, что этот код для выполнения блока кода и привести к выходу "x"
и "y"
, или просто бросить синтаксическую ошибку:Странный результат в Руби «конец, если»
if true
puts "x"
end if
puts "y"
Однако интерпретатор игнорирования блок if true
и выполняет только puts "y"
. Если я вместо этого ввести следующий код:
if true
puts "x"
end if
интерпретатор завершает работу с ошибкой синтаксиса конца-входа. Есть ли причина, по которой первый фрагмент является допустимым кодом, но каким-то образом неправильным? Мне кажется, что в парсере есть некоторая ошибка.
Я подтвердил это в Ruby 2.1.2, а также Ruby 2.1.5.
Ваш код эквивалентен 'if puts" y "; если правда; ставит «х»; конец; end'. 'puts" y "' возвращает 'nil', поэтому' if true; ставит «х»; end' не выполняется. –
Aaaa, я понимаю. Он выполняется как однострочный. (если true, помещает «x»; конец), если puts «y» Немного сложно. Не ожидал, что он это прочитает. –
Попробуйте использовать анализатор [Ruby parseer] (https://github.com/seattlerb/ruby_parser) и посмотрите, может ли он объяснить, как интерпретируется ваш код. –