변수가 0이 아닌 0이 아닌지 확인하기 위해 다음 코드를 사용하고 있습니다.
if(discount != nil && discount != 0)
...
end
더 좋은 방법이 있습니까?
답변
discount.nil이 아니라면? || 할인 == 0 # ... 종료
답변
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
일반적인 면책 조항에주의하십시오 : 강력한 힘 / 책임, 어두운면으로 이어지는 원숭이 패치 등.
답변
5 년이 지난 후 ….
if discount.try :nonzero?
...
end
이 노트에 중요 try
그것이 일반 루비에서 사용할 수 없습니다 있도록 ActiveSupport 보석에 정의되어 있습니다.
답변
[nil, 0] .include? (할인)이 아닌 한 # ... 종료
답변
Ruby 2.3.0부터 안전한 탐색 연산자 ( &.
) 와을 결합 할 수 있습니다 Numeric#nonzero?
. 인스턴스가 있었고 -숫자 인 경우를 &.
반환 nil
합니다 .nil
nonzero?
0
if discount&.nonzero?
# ...
end
또는 접미사 :
do_something if discount&.nonzero?
답변
if (discount||0) != 0
#...
end
답변
당신은 이것을 할 수 있습니다 :
if (!discount.nil? && !discount.zero?)
경우 때문에 순서는 여기에 중요 discount
하다 nil
, 다음은 없을 것이다 zero?
방법을. 그러나 Ruby의 단락 평가는 discount.zero?
if discount
가 평가를 시도하지 못하게해야합니다 nil
.