a || a = b or a ||= b
和
a = a || b
如果
a = 4且b = 6,输出始终为4
这总是让我感到困惑和误解.有人可以解释一下吗?
解决方法
a || a = b
查找a是否真实,返回a,否则a = b完成,即你将b的值赋给a.
a = a || b
这是一项任务操作.在这里,您可以为其分配值,而不管它具有什么值.所以a等于||湾在声明的第二部分,你正在寻找一个.如果它的值是真实的,你将它分配给它自己,否则你将b的值赋给a.
TL; DR
a = a || b正在为一个值(取决于条件)赋值,而不管它具有什么值.
a || = b如果已经存在则返回a,否则a = b
用例子解释:
你可以想到一个|| a = b作为|| (a = b).现在假设a = 4且b = 6.
由于按优先顺序,这是一个OR运算,由于OR的运算顺序是从左到右,我们从第一个开始:
# lets call this fig. 1 a || (a = b) ^ | . (here)
这个a的值为4,这是一个真值.因此,评估停止,然后返回4. (为什么?提示:true || anything = true)
现在假设a = nil和b = 6.我们从同一个地方重新开始(图1).由于a在Ruby中是错误的,因此我们移动到OR运算的右侧,即a = b
# lets call this fig. 2 a || (a = b) ^ | . (here)
由于这是一个赋值操作,它将被执行,我们最终会将6分配给a.
回到a = a ||湾您可以将其视为a =(a || b).显然,按优先顺序进行赋值操作.由于赋值操作的顺序是从右到左,因此首先评估(a || b).
# lets call this fig. 3 a = (a || b) ^ | . (here)
如果a = 4且b = 6,则a || b将返回4(如上所述).否则,如果a = nil且b = 6,则a || b将返回6.
现在无论从||返回什么值操作被分配到第一个a.
# lets call this fig. 4 a = (a || b) ^ | . (here)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。