三元在本地和heroku中有所不同

时间:2013-10-17 12:25:07

标签: ruby-on-rails heroku

我有这个方法它非常简单,几乎所有的时候isTrue param都应该为false并返回“2”。

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

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

我将三元组改为:

isTrue == true ? 1 : 2

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

2 个答案:

答案 0 :(得分:1)

这绝对是错误的:

isTrue = true ? 1 : 2

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

将其更改为:

isTrue == true ? 1 : 2

关于开发和生产模式之间的区别:检查你是否真的将布尔值输入方法而不是整数(0或1),字符串('0','1','t','f','y ','n'等)或者没有。

答案 1 :(得分:0)

isTrue = true ? 1 : 2 

这将始终返回1作为Mark Meeus评论。

=是ruby中的assignment operator,用于为变量指定给定值。

==,但是comparison operator

因此,使用您当前的代码,您将分配“isTrue = true”,然后告诉代码如果1isTrue则返回true