【问题标题】:What does the '||=' operator do in ruby? [duplicate]'||=' 运算符在 ruby​​ 中的作用是什么? [复制]
【发布时间】:2012-03-30 17:37:12
【问题描述】:

可能重复:
What does ||= mean in Ruby?

我是 ruby​​ 新手,我看到这里的答案之一使用了这个:

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

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

【问题讨论】:

标签: ruby


【解决方案1】:

这篇文章解释得很好。

« Ruby,并发,... |主要 |如何更新... » Ruby T-Square 运算符的奇特案例。 通过 prashant 于 2008 年 12 月 14 日 "||=" 操作符很有趣,无论是它的作用还是它在 Ruby 领域的广泛使用。操作员不会做您通常期望的事情。即,

a ||= expr

不一样

a = a ||表达式

评估恰好是

a 或 a = expr

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

正如一个小的 DTrace 脚本将验证的那样,这个操作符没有被实现是一个方法(或 Ruby 领域的任何地方)并且是 VM 固有的。原因是性能,而且当您进行“或”运算时,不必计算整个表达式即可产生结果:

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

。 . .

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

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

【讨论】:

    【解决方案2】:

    做什么||做?如果您有 a 和 b,那么当且仅当 a 或 b 为真时,a || b 为真。与 ||= 相同,此运算符结合了两个操作 '=' 和 '||'。所以a ||= b 等价于c || c = b

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

    【讨论】:

    • 实际上是c || c = b。如果 c 为真,则根本不进行任何赋值。这是一个重要的区别,当它实际上以大多数时间使用的方式使用时,即作为可选的初始化程序。
    • -1。这是错误的,正如 StackOverflow 和 Ruby 邮件列表上已经解释了无数次一样。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-14
    • 1970-01-01
    • 2017-04-24
    • 2014-05-09
    • 2016-02-20
    • 2016-07-24
    相关资源
    最近更新 更多