【问题标题】:ruby boolean operator or || difference [duplicate]ruby 布尔运算符或 ||差异[重复]
【发布时间】:2012-03-26 05:46:15
【问题描述】:

可能重复:
Ruby: difference between || and 'or'

在 ruby​​ 中,不是 'or' 和 '||'同一件事情?执行代码时会得到不同的结果。

line =""
if (line.start_with? "[" || line.strip.empty?)
  puts "yes"
end




line =""
if (line.start_with? "[" or line.strip.empty?)
  puts "yes"
end

【问题讨论】:

    标签: ruby


    【解决方案1】:

    不,这两个运算符的效果相同,但优先级不同。

    || 运算符具有非常高的优先级,因此它与前一个值的绑定非常紧密。 or 运算符的优先级很低,因此它的绑定没有其他运算符那么紧密。

    有两个版本的原因正是一个具有高优先级而另一个具有低优先级,因为这样很方便。

    【讨论】:

    • 所以如果第一个语句的计算结果类似于 ("[" || line.strip.empty?) = "[" 然后是 (line.start_with?"[")。
    • 正是如此。优先级是一种在您省略时猜测您的意思的方法,例如括号。就像数学优先一样。
    【解决方案2】:

    在您使用的第一种情况下 ||由于其他答案很好地说明了优先级,因此在语句中的任何其他内容之前都对其进行了评估,添加了一些括号使其更加清晰,您的第一个语句就像:

    (line.start_with? ("[" || line.strip.empty?))
    

    至于翻译成

    (line.start_with? ("["))
    

    结果为假

    另一方面,您的第二个语句转换为

    ((line.start_with? "[") or line.strip.empty?)
    

    至于翻译成

    (FALSE or TRUE)
    

    结果为真

    这就是为什么我每次调用函数时都尝试使用括号。 :-)

    【讨论】:

      【解决方案3】:

      丹尼尔是对的,更清楚:

      if (line.start_with?("[") || line.strip.empty?)
        puts "yes"
      end
      

      将产生yes

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-04-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多