ruby 或运算符在初始化方法中的行为不同

问题描述

对编程相当陌生,并遇到了以下代码,它确实给出了预期的结果,即如果作为参数传递或生成新对象并存储它,它将对象存储在实例变量中。但语法使用 or(||) 运算符,据我所知,它总是返回一个布尔值。那么它的行为是不同的还是有更多的 or/and 操作符?

    while (true){    
    }

解决方法

ruby 中的 or 运算符不会“返回”布尔值:如果第一个表达式为真(该术语表示除 falsenil 之外的所有内容),则计算第一个表达式,否则为评价后者

5 || nil => 5
nil || 5 => 5
false || nil => nil
nil || false => false
,

在 ruby​​ 中,一切都可以作为表达式求值,而表达式会返回一个值

所以 || 甚至 && 都不会返回布尔值,它会返回真值或假值

在 || 的情况下它会检查第一个表达式是否为真,如果不是它会转到下一个,然后下一个,如果没有找到真值,它将返回最后一个也是假的

irb(main):004:0> nil ||  "true value" || 0
=> "true value"

irb(main):006:0> nil || false || "true value" || 0 || true
=> "true value"

&& 的情况下,它会做相反的事情,它将返回它可以找到的第一个假值

irb(main):001:0> nil && false && "true value" && 0 && true
=> nil

并且 if 条件将理解这些逻辑运算符返回的真值和假值

rb(main):007:0> if "true"
irb(main):008:1> puts "true"
irb(main):009:1> else
irb(main):010:1> puts "false"
irb(main):011:1> end
true

irb(main):017:0> if nil
irb(main):018:1> puts "true"
irb(main):019:1> else
irb(main):020:1> puts "false"
irb(main):021:1> end
false