ruby-on-rails – Ruby 2.3安全导航操作符’和.之间有什么区别.和’试试!’ ActiveSupport的方法?

前端之家收集整理的这篇文章主要介绍了ruby-on-rails – Ruby 2.3安全导航操作符’和.之间有什么区别.和’试试!’ ActiveSupport的方法?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
是安全的运算符吗?从 Ruby 2.3和尝试! ActiveSupport的方法可以互换吗?如果不是,它们之间有什么区别?

解决方法

一个关键的区别是尝试!是一个额外的方法调用,而&amp ;.不是.我能想到这造成的一个(公认的做作)差异
"1234"&.gsub(/\d/,"a")
$& #=> "1234"

这里没有惊喜 – 我进行了正则表达式匹配,因此设置了正则表达式全局变量($&是匹配的字符串).

但是,如果(在一个新鲜的irb会议 – 这很重要)我做

"1234".try!(:gsub,/\d+/,"a")
$& #=> nil

那么正则表达式相关的全局变量是零.这是因为这些全局变量并不是全局的 – 它们与调用代码的位置相关联(文档调用此线程和方法本地全局变量)

在这种情况下,$&仍在设置,但它正在设置内!方法,所以你永远不会看到它.

额外的方法调用也使得尝试更慢(在快速基准测试中几乎是一个数量级),尽管在任何实际使用中,您调用的实际方法的成本应该使尝试的成本相形见绌!

猜你在找的Ruby相关文章