【发布时间】: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
def fib(n)
[0,1].include? n ? n : (fib(n-1) + fib(n-2))
end
fib 5 => false
这是为什么?因为它在分解为标准 if then else 时有效。
【问题讨论】:
标签: ruby ternary-operator
运算符优先级。你实际上是在这样做:
[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))
【讨论】: