Проверка, является ли переменная не ноль и не ноль в ruby - PullRequest
229 голосов
/ 31 октября 2008

Я использую следующий код для проверки, что переменная не ноль и не ноль

if(discount != nil && discount != 0) 
  ...
end

Есть ли лучший способ сделать это?

Ответы [ 16 ]

2 голосов
/ 29 мая 2015

Вы можете воспользоваться предоставленным NilClass предоставленным методом #to_i, который вернет ноль для nil значений:

unless discount.to_i.zero?
  # Code here
end

Если discount может быть дробными числами, вместо этого можно использовать #to_f, чтобы предотвратить округление числа до нуля.

1 голос
/ 14 сентября 2015

При работе с записью базы данных мне нравится инициализировать все пустые значения с 0, используя помощник по миграции:

add_column :products, :price, :integer, default: 0
0 голосов
/ 19 сентября 2018

Альтернативное решение - использовать уточнения, например:

module Nothingness
  refine Numeric do
    alias_method :nothing?, :zero?
  end

  refine NilClass do
    alias_method :nothing?, :nil?
  end
end

using Nothingness

if discount.nothing?
  # do something
end
0 голосов
/ 20 июля 2016
if discount.nil? || discount == 0
  [do something]
end
0 голосов
/ 01 ноября 2008

Я считаю, что следующее достаточно для рубинового кода. Я не думаю, что смогу написать модульный тест, который показал бы разницу между этим и оригиналом.

if discount != 0
end
0 голосов
/ 31 октября 2008

Вы можете инициализировать скидку до 0, если ваш код гарантированно не будет пытаться использовать ее до инициализации. Полагаю, это сняло бы одну проверку, я не могу думать ни о чем другом.

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