【发布时间】:2015-08-21 07:36:23
【问题描述】:
我希望这段代码执行代码块并导致输出"x" 和"y",或者只是抛出一个语法错误:
if true
puts "x"
end if
puts "y"
但是,解释器会忽略if true 块,只执行puts "y"。如果我改为输入以下代码:
if true
puts "x"
end if
解释器以输入结束语法错误退出。第一个 sn-p 是有效代码但不知何故执行错误有什么原因吗?在我看来,解析器中有一些错误。
我已经在 Ruby 2.1.2 和 Ruby 2.1.5 中确认了这一点。
【问题讨论】:
-
你的代码相当于
if puts "y"; if true; puts "x"; end; end。puts "y"返回nil,所以if true; puts "x"; end不会被执行。 -
啊啊啊,我明白了。它像单线一样执行。 (如果为真; puts "x"; end) if puts "y" 有点棘手。没想到它会这样读。
-
尝试使用Ruby parser,看看它是否可以解释您的代码是如何被解释的。
标签: ruby