ноль значения странности - PullRequest
       3

ноль значения странности

0 голосов
/ 30 сентября 2010

Я столкнулся с простой ситуацией, которую не могу понять.

Я должен решить, показывать ли ссылку «больше», в зависимости от количества статей.

Код прост:

@no_more = offset + length >= Article.count

@no_more переменная иногда равна нулю. Я вижу в отладчике, что offset = 0, length = 10 и Article.count = 12

Но приведенное выше выражение дает ноль.

Даже это не помогает:

@no_more = false if @no_more.nil?

@no_more все равно будет ноль.

Почему он так себя ведет?

Ответы [ 4 ]

1 голос
/ 30 сентября 2010

как насчет не-не присваивания?

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
0 голосов
/ 01 октября 2010

Попробуйте напечатать @ no_more.class и проверьте, действительно ли это NilClass, а не FalseClass.

Я говорю это, потому что у меня была та же проблема на днях. Это было с отладчиком в netbeans (и jruby в этом отношении), но отладчик, похоже, не понимал FalseClass.

например, этот код:

p = false
puts p.class

Для меня это, конечно, напечатало FalseClass, но отладчик настоял, чтобы p был NilClass. Я подтвердил "kind_of?" что это действительно был FalseClass.

Вы можете попробовать проверить то же самое.

@no_more.kind_of?(FalseClass)

Просто подумал, что упомяну это, если это та же проблема, что и у меня. Это занимало меня всю ночь, пытаясь понять, что происходит.

0 голосов
/ 30 сентября 2010

Убедитесь, что вы не сбрасываете переменную @no_more где-то еще в вашем контроллере или представлении, особенно если вы делаете перенаправление.

0 голосов
/ 30 сентября 2010

Вам нужны скобки:

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

Приоритет работает странно без них, поэтому Ruby интерпретирует ваш код таким образом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...