0

我有这种方法,它非常简单,几乎所有时间 isTrue 参数都应该为假并返回“2”。

def test(isTrue = false)
  isTrue ? 1 : 2
end

这在我的开发环境中运行良好,但是当我将它推送到 heroku 时,它突然开始返回,好像它是真的一样,我绝对肯定它是错误的。我认为它可能正在检查 var 是否为 nil (或类似的东西)

我将三进制更改为:

isTrue == true ? 1 : 2

它纠正了问题,我不明白为什么会发生这种情况。有人可以解释一下吗?谢谢!

4

2 回答 2

1

这绝对是错误的:

isTrue = true ? 1 : 2

它将变量设置isTruetrue并使用该语句 ( true) 的结果作为三元运算符的输入,因此它将始终返回true

将其更改为:

isTrue == true ? 1 : 2

关于开发模式和生产模式之间的差异:检查您是否确实将布尔值输入到方法中,而不是整数(0 或 1)、字符串('0'、'1'、't'、'f'、'y'、' n'等)或无。

于 2013-10-17T12:34:48.803 回答
0
isTrue = true ? 1 : 2 

1正如Mark Meeus评论 的那样,这将始终返回。

=是 ruby​​ 中的赋值运算符,用于为变量赋值。

==, 然而是一个比较运算符

因此,使用您当前的代码,您正在分配“isTrue = true”,然后告诉代码返回1if isTrueis true

于 2013-10-17T12:39:01.057 回答