我正在努力:https://www.codewars.com/kata/the-if-function/
为什么前两个工作而不是第三个工作?
def _if(bool, ifTrue, ifFalse)
bool ? ifTrue.call : ifFalse.call
end
def _if(bool, ifTrue, ifFalse)
case !!bool
when true
ifTrue.call
when false
ifFalse.call
end
end
def _if(bool, ifTrue, ifFalse)
case bool
when true
ifTrue.call
when false
ifFalse.call
end
end
我也看到有人说"双重否定确保无论最初的价值如何,你都会得到真或假,永远不会有一些神秘的价值。"
但我的问题是,当Ruby中的每个对象都是布尔值时,它会有什么神秘的价值?
答案 0 :(得分:3)
你的最后一行"当Ruby中的每个对象都是一个布尔值时,它会有什么神秘的价值?"是你困惑的根源。这根本不是真的; Ruby中唯一的布尔值是 true 和 false 。
我无法确定,但我猜你错误地理解了除了 false 和 nil 之外的所有Ruby语句真实。 " Truthy"意味着如果您在 if 语句中使用它,它将表现得像它的真实。即使是空字符串也是真的。但它实际上并不是布尔值 true (除非你提前!!,如你所说)。
因为你在例3中的case语句是"当我传入的值是布尔值true | false ..."时,除非你真的传入,否则它不会匹配布尔值为true或false。