用任何语言可靠且明确地解析事物是具有挑战性的。当您开始使用保留字时尤其如此。并且irb
必须超越这一点,并在解析器之上提供一个交互式模型,这更加困难。我个人认为,无论是作为语言的用户还是作为维护者,担心这样的情况并没有太大的价值。在我看来,最好简单地弄清楚什么是有效的,并尽可能避免陷入这些情况。
你可以在普通的 Ruby 中看到一些类似的行为irb
。例如:
puts({if: true}) # no problem, behaves as expected in Ruby 1.9.3.
puts {if: true} # raises a syntax error in Ruby 1.9.3
要回答您的问题,它是“预期的行为、错误还是限制”,我想说您应该忽略irb
并将其与普通的 Ruby 进行比较,如果您这样做,它就可以正常工作。这意味着它必须是一个irb
错误。
但是有可能或值得解决吗?@coreyward 在他的评论中提出了一个很好的观点,即irb
在大多数情况下遇到if
. 您必须进一步了解才能确定,但您可能无法明确解释所有这样的情况。
我的建议:如果可以的话,完全避免这种结构,如果可以避免的话,不要使用标签的保留字!
这是一个可以用纯 Ruby 运行的文件(例如 MRI)。您应该{:if=>true}
在输出中看到以确认它有效。
{if: true}
foo = {if: true}
# if MRI is working, should be able to execute this file without trouble.
p foo