‘|| =’运算符在ruby中做了什么?

可能重复:
什么|| =在Ruby中意味着什么?

我是ruby的新手,我在其中一个答案中看到了这个:

RACK_ENV = ENV['ENVIRONMENT'] ||= 'test'

我找不到任何对||=运算符的引用…

是什么|| 做? 如果你有a和b然后a || b 当且仅当a或b为真时,b为真。 它与|| =相同,此运算符组合了两个运算’=’和’||’。 因此a ||= bc || c = b相等 c || c = b

编辑:所以在你的上下文中ENV [‘ENVIRONMENT’] || =’test’意味着如果ENV [‘ENVIRONMENT’]不是nil而不是false,它将保留其值,否则它将变为’test’,之后ENV [‘ENVIRONMENT’]的新值被分配给RACK_ENV

这篇文章解释得非常好。

«Ruby,并发,… | 主要| 如何更新…»Ruby T-Square运算符的奇怪案例。 通过prashant于2008年12月14日,“|| =”运算符很有意思,无论是它在Ruby领域广泛使用的方式都是如此。 操作员没有按照您通常的预期行事。 即

a || = expr

是不一样的

a = a || EXPR

评估恰好是

a或a = expr

并且差异在至少一个用例[0]中很重要

当一个小的DTrace脚本将validation时,该运算符未实现是一种方法(或Ruby领域中的任何位置)并且是VM固有的。 原因是性能,以及当你’或’时,不必评估整个表达式以产生结果的事实:

“Ruby的布尔运算符是内置于语言中的,并不基于方法:例如,类不能定义自己的&&方法.Ruby定义了特殊的true和false值,但没有布尔类型。方法。原因是布尔运算符可以应用于任何值,并且必须针对任何类型的操作数执行一致。“

。 。 。

“Ruby的布尔运算符是语言的核心部分而不是可重定义的方法的另一个原因是二元运算符是”短路的“。如果操作的值完全由左操作数确定,那么右边的操作数被忽略甚至从未评估过。“

https://blogs.oracle.com/prashant/entry/the_ruby_t_square_operator