ruby或运算符在initialize方法中表现不同



对编程来说相当陌生,并且遇到了以下代码,这些代码确实给出了预期的结果,也就是说,如果作为argument传递,它会将对象存储在实例变量中,或者默认生成一个新对象并存储它。但语法是使用or(||(运算符,据我所知,它总是返回布尔值。那么,它的行为是不同的,还是对运营商有更多的影响?

def initialize(args = {})`
@sms = args[:sms]              || Messenger.new
end

ruby中的or运算符不"返回";一个布尔值:如果第一个表达式是truthy(一个表示除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

相关内容

  • 没有找到相关文章

最新更新