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

ruby或运算符在初始化方法中的行为不同,ruby,instance-variables,Ruby,Instance Variables,对于编程来说是相当陌生的,并且遇到了以下代码,这些代码确实给出了预期的结果,即如果将对象作为argumnet传递,那么它将在实例变量中存储该对象,或者默认情况下生成一个新对象并存储该对象。但是语法是使用or(| |)运算符,据我所知,它总是返回布尔值。那么,它的行为是否有所不同,或者对或/和操作员的影响更大 def initialize(args = {})` @sms = args[:sms] || Messenger.new end ruby中的or运算符不“返

对于编程来说是相当陌生的,并且遇到了以下代码,这些代码确实给出了预期的结果,即如果将对象作为argumnet传递,那么它将在实例变量中存储该对象,或者默认情况下生成一个新对象并存储该对象。但是语法是使用or(| |)运算符,据我所知,它总是返回布尔值。那么,它的行为是否有所不同,或者对或/和操作员的影响更大

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

ruby中的or运算符不“返回”布尔值:如果第一个表达式为truthy(表示除
false
nil
之外的所有内容的术语),它将求值到第一个表达式,否则将求值到后者

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

在ruby中,一切都可以作为表达式进行计算,表达式将返回一个值

所以
|
甚至
&&
都不返回布尔值,因为它将返回truthy或falsy值

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

irb(main):004:0>nil | | |“真值”| | 0
=>“真实值”
irb(main):006:0>nil | | | | | | |“真值”| | 0 | |真
=>“真实值”
&&
的情况下,它将执行相反的操作,它将返回它能找到的第一个falsy值

irb(main):001:0>nil&&false&&true值&0&&true
=>零
if条件将理解truty和falsy值,这将是这些逻辑运算符返回的值

rb(main):007:0>如果为“真”
irb(主):008:1>置“真”
irb(主要):009:1>其他
irb(main):010:1>置“假”
irb(主):011:1>结束
真的
irb(主):017:0>如果为零
irb(主):018:1>置“真”
irb(主):019:1>其他
irb(主):020:1>置“假”
irb(主):021:1>结束
假的

找到你了,刚刚在irb登记,你是对的。因为到目前为止,我只使用了| |和比较运算符,ruby实际上只是计算那个比较,而| |运算符只是计算那个比较的结果(如果左边是真的,那么右边是真的)。只是为了我的理智检查,这样做有意义吗?是的,你可能直到现在都只是表面上使用它,但这在你的案例中起了作用。但这是正确的思考方式谢谢,真的很感谢你的帮助我很高兴,先生谢谢,我现在更好地理解了…谢谢你的帮助