Ruby   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了IRB – Ruby 1.9.x哈希语法:{if:true}不等于{:if => true}大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
简而言之,我正在编写一个包含选项参数的方法,如果键的值为:if,则会执行某些操作.当我使用新语法在IRB中尝试哈希时,我在IRB中遇到语法错误,提示保持打开状态:
1.9.3p374 :010 > {if: truE}
1.9.3p374 :011?>

使用旧的语法,工作得很好:

1.9.3p374 :011 > {:if => truE}
 => {:if=>truE}

所有启动语句的关键字都表现出相同的行为.例如. def,do,module,case

在中间和类中发生的其他保留字工作正常:否则,结束

我的问题是:这是预期的行为,错误还是限制?

解决方法

用可靠和明确的方式解析任何语言的东西都是一项挑战.当您开始使用保留字时尤其如此.并且irb必须超越它并在解析器之上提供交互式模型,这更加困难.我个人并不认为担心这样的案件有太大的价值,无论是作为语言的用户还是作为维护者.在我看来,最好简单地弄清楚什么有效,并尽可能避免陷入这些情况.

您可以在irb之外的纯Ruby中看到一些类似的行为.例如:

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 bug.

但是有可能或值得解决吗? @coreyWARD在他的评论中提出了一个很好的观点,即在遇到if时,irb必须在大多数情况下延迟执行.你必须要进一步了解,但你可能无法明确地解释所有这样的情况.

我的建议:如果可以的话,完全避免这种结构,如果可以避免,不要使用保留字作为标签!

这是一个可以用普通Ruby(例如MRI)运行的文件.您应该在输出中看到{:if => truE}以确认它是否有效.

{if: truE}
foo = {if: truE}
# if MRI is working,should be able to execute this file without trouble.
p foo

大佬总结

以上是大佬教程为你收集整理的IRB – Ruby 1.9.x哈希语法:{if:true}不等于{:if => true}全部内容,希望文章能够帮你解决IRB – Ruby 1.9.x哈希语法:{if:true}不等于{:if => true}所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。