加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

||之间的区别a = b和a = a || bruby?

发布时间:2020-12-16 21:37:31 所属栏目:百科 来源:网络整理
导读:任何人都可以点亮这个表达.似乎两者都相同,但事实并非如此. 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 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)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读