nil ruby-1.9.1-p378 > p-6ren">
gpt4 book ai didi

ruby - ruby 中的 if(!x) 与 if(x==false)

转载 作者:数据小太阳 更新时间:2023-10-29 06:42:32 26 4
gpt4 key购买 nike

我不明白下面的代码:

ruby-1.9.1-p378 > puts "nil is false" unless nil
nil is false
=> nil
ruby-1.9.1-p378 > puts "nil isn't false" unless nil == false
nil isn't false
=> nil

在大多数语言中(至少是基于 C 的语言),if(!cond) 和 if(cond==false) 的计算结果相同。这里发生了什么使情况并非如此?

(我想知道为什么的细节,我明白是这样的。)

最佳答案

Ruby 认为 falsenil 是仅有的两个“falsy”值,而其他所有值都是“truthy”。这是根据定义不能修改的(至少在 MRI 中)。此定义用于所有内置运算符,如 ifunlesswhileuntilcond ? if_truthy : if_falsey, ||, &&, ...

编写 foo == bar 将始终以 bar 作为参数调用 foo 上的 == 方法.默认情况下,nilfalsetrue 和所有其他立即数(如符号等)只等于它们自己。不过,这可以更改:

def nil.==(bar)
super || bar == false
end
puts "nil == false" if nil == false # => "nil == false"

在 Ruby 1.9 中,您还可以重新定义运算符 !,因此 unless foo 不一定与 if !foo 或与 if foo 相反:

def true.!
true
end

puts "True?" if true # => "True?"
puts "or not?" if !true # => "or not?"

并不是说有人会推荐做这样的事情......

关于ruby - ruby 中的 if(!x) 与 if(x==false),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3082341/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com