Ruby booleans运算符双重双感叹号

时间:2016-08-03 03:18:43

标签: ruby boolean

我正在努力: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中的每个对象都是布尔值时,它会有什么神秘的价值?

1 个答案:

答案 0 :(得分:3)

你的最后一行"当Ruby中的每个对象都是一个布尔值时,它会有什么神秘的价值?"是你困惑的根源。这根本不是真的; Ruby中唯一的布尔值是 true false

我无法确定,但我猜你错误地理解了除了 false nil 之外的所有Ruby语句真实。 " Truthy"意味着如果您在 if 语句中使用它,它将表现得像它的真实。即使是空字符串也是真的。但它实际上并不是布尔值 true (除非你提前!!,如你所说)。

因为你在例3中的case语句是"当我传入的值是布尔值true | false ..."时,除非你真的传入,否则它不会匹配布尔值为true或false。