我是ruby的新手,我看到这个用于其中一个答案:
RACK_ENV = ENV['ENVIRONMENT'] ||= 'test'
我找不到对||=
运算符的任何引用...
答案 0 :(得分:1)
这篇文章解释得非常好。
«Ruby,并发,... |主要|如何更新...» Ruby T-Square运算符的奇怪案例。 通过prashant于2008年12月14日 “|| =”运算符很有意思,无论是它在Ruby领域广泛使用的方式都是如此。操作员没有按照您通常的预期行事。即,
a || = expr
与
不同a = a || EXPR
评估恰好是
a或a = expr
并且差异在至少一个用例[0]
中很重要当一个小的DTrace脚本将验证时,该运算符未实现是一种方法(或Ruby领域的任何地方)并且是VM固有的。原因是性能,以及当您进行“OR”时不必评估整个表达式以产生结果的事实:
“Ruby的布尔运算符是内置于语言中的,并不基于方法:例如,类不能定义自己的&&方法.Ruby定义了特殊的true和false值,但没有布尔类型。这样做的原因是布尔运算符可以应用于任何值,并且必须对任何类型的操作数都表现一致。“
。 。 。
“Ruby的布尔运算符是语言的核心部分而不是可重定义的方法的另一个原因是二元运算符是”短路的“。如果操作的值完全由左手操作数确定,那么右手操作操作数被忽略,甚至从未被评估过。“
https://blogs.oracle.com/prashant/entry/the_ruby_t_square_operator
答案 1 :(得分:-2)
什么是||做?如果你有a和b,那么a || b
当且仅当a或b为真时才为真。与|| =相同,此运算符将两个运算'='和'||'组合在一起。因此a ||= b
与c || c = b
编辑:所以在你的上下文中ENV ['ENVIRONMENT'] || ='test'意味着如果ENV ['ENVIRONMENT']不是nil而不是false,它将保留其值,否则它将变为'test'并且之后,ENV ['ENVIRONMENT']的新值被分配给RACK_ENV