Проверка, не является ли переменная нолем и не обнуляет в рубине

249
задан Salvador Dali 11 August 2015 в 11:42
поделиться

7 ответов

unless discount.nil? || discount == 0
  # ...
end
404
ответ дан Dejan Simic 23 November 2019 в 02:57
поделиться

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

0
ответ дан Ed S. 23 November 2019 в 02:57
поделиться

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

if discount != 0
end
-6
ответ дан Andrew Grimm 23 November 2019 в 02:57
поделиться

Вы могли сделать это:

if (!discount.nil? && !discount.zero?)

порядок важен здесь, потому что, если discount будет nil, то он не будет иметь zero? метод. Оценка короткого замыкания Ruby должна препятствовать тому, чтобы он пытался оценить discount.zero?, однако, если discount nil.

14
ответ дан Jeremy Ruten 23 November 2019 в 02:57
поделиться
if (discount||0) != 0
  #...
end
17
ответ дан Raimonds Simanovskis 23 November 2019 в 02:57
поделиться
unless [nil, 0].include?(discount) 
  # ...
end
27
ответ дан Dejan Simic 23 November 2019 в 02:57
поделиться
class Object
  def nil_zero?
    self.nil? || self == 0
  end
end

# which lets you do
nil.nil_zero? # returns true
0.nil_zero?   # returns true
1.nil_zero?   # returns false
"a".nil_zero? # returns false

unless discount.nil_zero?
  # do stuff...
end

Остерегаются обычных правовых оговорок... великой державы / ответственность, продвижение исправления обезьяны к темной стороне и т.д.

40
ответ дан madlep 23 November 2019 в 02:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: