零价值怪异

时间:2010-09-30 09:33:39

标签: ruby-on-rails ruby null

我遇到了一个我无法弄清楚的简单情况。

我必须决定是否显示“更多”链接,具体取决于文章计数。

代码很简单:

@no_more = offset + length >= Article.count

@no_more变量有时等于nil。我在调试器中看到offset = 0length = 10Article.count = 12

但上面的表达式为nil。

即使这样也无济于事:

@no_more = false if @no_more.nil?

@no_more仍然是零。

为什么它会像这样?

4 个答案:

答案 0 :(得分:1)

怎么样没有 - 不是作业?

ruby-1.8.7-p299 > @no_more
 => nil 
ruby-1.8.7-p299 > !!@no_more
 => false 
ruby-1.8.7-p299 > @no_more = true
 => true 
ruby-1.8.7-p299 > !!@no_more
 => true

答案 1 :(得分:0)

你需要括号:

@no_more = ((offset + length) >= Article.count)

如果没有它们,优先级就会很奇怪,所以Ruby以这种方式解释你的代码。

答案 2 :(得分:0)

确保您没有在控制器或视图中的其他位置重置@no_more变量,尤其是在进行重定向时。

答案 3 :(得分:0)

尝试打印@no_more.class并检查它是否真的是NilClass而不是FalseClass。

我说这是因为前几天我遇到了同样的问题。这与netbeans中的调试器(以及jruby)有关,但是调试器似乎不理解FalseClass。

例如此代码:

p = false
puts p.class

对我来说,这个当然打印了FalseClass,但是调试器坚持p是NilClass。我确认“kind_of?”它确实是一个FalseClass。

您可以尝试检查相同的内容。

@no_more.kind_of?(FalseClass)

我以为我会提到这件事,以防我遇到同样的问题。它让我半夜忙着试图找出wtf正在进行中。