在Ruby中,| |=(或等于)是什么意思?

以下代码在Ruby中是什么意思

||=

它对语法有什么意义或原因吗

a | |=b是一个条件赋值运算符。这意味着:

  • 如果a未定义或错误,则计算b并将a设置为结果
  • 否则(如果定义了a并计算为truthy),则不计算b,并且不进行赋值

例如:

a | |=nil#=>无
a | |=0#=>0
a | |=2#=>0
foo=false#=>错误的
foo | |=真#=>符合事实的
foo | |=false#=>符合事实的

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

  • a+=b转换为a=a+b
  • a|a=b大致翻译为a|a=b

这是a | | a=b的近义词。区别在于,当a未定义时,a | a=b将引发namererror,而a | a=ba设置为b。如果ab都是局部变量,那么这种区别并不重要,但是如果其中一个是类的getter/setter方法,那么这种区别就很重要

进一步阅读:

  • http://www.rubyinside.com/what-rubys-double-pipe-or-equals-really-does-5488.html

发表评论