为了账号安全,请及时绑定邮箱和手机立即绑定

在Ruby中,x=(或-等于)意味着什么?

/ 猿问

在Ruby中,x=(或-等于)意味着什么?

慕工程0101907 2019-06-10 17:06:54

在Ruby中,x=(或-等于)意味着什么?

下面的代码在Ruby中意味着什么?

||=

它是否有任何意义或理由的语法?


查看完整描述

3 回答

?
泛舟湖上清波郎朗

这个问题在Ruby邮件列表和Ruby博客上经常被讨论,以至于现在甚至在Ruby邮件列表上都有线程,其唯一目的是收集链接到所有其他线程在Ruby邮件列表上讨论这个问题。

这里有一个:\x=(OR相等)线程和页的最终列表

如果你真的想知道发生了什么,看看11.4.2.3节的“简写作业”Ruby语言草案规范.

作为第一次近似,

a ||= b

等于

a || a = b

相当于

a = a || b

然而,这只是第一个近似,特别是在a是个未知数。语义也因是简单变量赋值、方法赋值还是索引赋值而有所不同:

a    ||= b
a.c  ||= b
a[c] ||= b

都受到不同的对待。


查看完整回答
反对 2019-06-10
?
四季花海

a ||= b条件赋值算子..意思是如果a未定义或法尔西,然后评估b并设定a结果..等价地,如果a被定义并计算为真实,则b不进行评估,也不进行赋值。例如:

a ||= nil # => nila ||= 0 # => 0a ||= 2 # => 0foo = false # => falsefoo ||= true # => truefoo ||= false # => true

令人困惑的是,它看起来类似于其他赋值运算符(例如+=),但行为不同。

  • a += b

    翻译成

    a = a + b

  • a ||= b

    大致翻译成

    a || a = b

这是一个近乎简略的词。a || a = b..区别是,当a是个未知数,a || a = bNameError,鉴于a ||= bab..这种区别在以下情况下是不重要的ab都是局部变量,但如果两者都是类的getter/setter方法,则具有重要意义。

进一步读:


查看完整回答
反对 2019-06-10
?
HUWWW

简明完整的答案

a ||= b

评估方法与以下几行

a || a = b
a ? a : a = bif a then a else a = b end

-

另一方面,

a = a || b

评估方法与以下几行

a = a ? a : bif a then a = a else a = b end

-

编辑:正如AJedi32在评论中指出的那样,这只有在以下情况下才成立。A是一个已定义的变量。2.评估一次和两次并不会导致程序或系统状态的差异。


查看完整回答
反对 2019-06-10

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信