【问题标题】:Ruby single line ternary in function, is returning boolean [duplicate]函数中的Ruby单行三元,返回布尔值[重复]
【发布时间】:2014-01-21 23:06:05
【问题描述】:
def fib(n)
  [0,1].include? n ? n : (fib(n-1) + fib(n-2))
end

fib 5 => false

这是为什么?因为它在分解为标准 if then else 时有效。

【问题讨论】:

    标签: ruby ternary-operator


    【解决方案1】:

    运算符优先级。你实际上是在这样做:

    [0, 1].include? (n ? n : fib...)
    

    即找到n ? n : (fib(n-1) + fib(n-2))的结果,将that传给include?

    使用括号强制执行您想要的评估顺序:

    [0, 1].include?(n) ? n : (f(n - 1) + fib(n - 2))
    

    【讨论】:

      猜你喜欢
      • 2017-05-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-13
      • 2021-10-29
      • 2013-03-11
      • 1970-01-01
      相关资源
      最近更新 更多