Tag: 真实性

为什么真相&&“字符串”返回“字符串”

假设我有类似的东西 true && true #=> true 这是有道理的,所以我尝试这样的事情: true && “dsfdsf” #=> “dsfdsf” 这让我感到惊讶,因为我经常会做一些事情,比如if something && something和if something && something ,我总是认为那是评估为真的并且会回归真实。 进一步的实验做的事情如下: jruby-1.7.3 :009 > “ad” && “dsf” => “dsf” jruby-1.7.3 :010 > “ad” && “sdfd” && nil => nil jruby-1.7.3 :011 > “ad” && nil && “sdf” => nil 如果全部为真,或者它找到的第一个假值,Ruby似乎返回最后一个值。 为什么这样做? 这是一个正确的心理模型吗?

如何从NilClassinheritance或如何模拟类似的function

我只想使用Null对象设计模式,但我发现我可以inheritanceNilClass。 我可以写一个方法“nil?” 并返回false,但如果用户在下面编写代码,该怎么办 if null_object puts “shouldn’t be here” end 为了澄清我尝试做的是: record = DB.find(1) # if it can not find record 1, the bellow code should not raise exception record.one_attr # and what’s more if record puts “shouldn’t be here” end # I don’t want to override all NilClass

我怎样才能避免Ruby中的真实性?

是否有任何标准方法可以避免Ruby中的真实性,或者我是否需要推出自己的解决方案,例如 class FalseClass def to_bool self end end class TrueClass def to_bool self end end true.to_bool # => true false.to_bool # => false nil.to_bool # => NoMethodError 42.to_bool # => NoMethodError 背景:我知道to_bool会违背Ruby的宽容性质,但我正在玩三元逻辑,并且想避免意外地做类似的事情 require “ternary_logic” x = UNKNOWN do_something if x 我正在使用三元逻辑,因为我正在编写一个flatmate共享网站的解析器(用于个人而非商业用途)并且某些字段可能缺少信息,因此不知道该地方是否存在是否符合我的标准。 但是,我会尝试限制使用三元逻辑的代码量。