변수가 0이 아닌 0이 아닌지 확인하기 위해 다음 코드를 사용하고 있습니다.
if(discount != nil && discount != 0)
...
end
더 좋은 방법이 있습니까?
discount거짓 인 경우 어떻게해야 합니까?
discount.in? [0, nil]가능한 청소기 방법
변수가 0이 아닌 0이 아닌지 확인하기 위해 다음 코드를 사용하고 있습니다.
if(discount != nil && discount != 0)
...
end
더 좋은 방법이 있습니까?
discount거짓 인 경우 어떻게해야 합니까?
discount.in? [0, nil]가능한 청소기 방법
답변:
discount.nil이 아니라면? || 할인 == 0 # ... 종료
The and and or keywords are banned. It's just not worth it. Always use && and || instead.합니다. 그리고 다윗과 톰의 이유로 옳습니다.
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 보석에 정의되어 있습니다.
try방법 이 없습니다 .
try합니다. 대체 옵션을 보여 주면 가치가 있다고 생각합니다 (이것이 처음에 upvoted 된 이유입니다!). ActiveSupport바닐라 루비가 아닌 독자 .
[nil, 0] .include? (할인)이 아닌 한 # ... 종료
Ruby 2.3.0부터 안전한 탐색 연산자 ( &.) 와을 결합 할 수 있습니다 Numeric#nonzero?. 인스턴스가 있었고 -숫자 인 경우를 &.반환 nil합니다 .nilnonzero?0
if discount&.nonzero?
# ...
end
또는 접미사 :
do_something if discount&.nonzero?
"foo"&.nonzero? # => NoMethodError: undefined method 'nonzero?' for "foo":String.... 임의의 객체에는 사용하기에 안전하지 않습니다.
nil.
nonzero?- 숫자 가 0"인 경우 답변에 명시되어 있습니다. 또한 완전히 임의의 객체가 있는지 확인해야 할 필요 0가있을 수도 있고 없을 수도있는 숫자를 확인하는 것과 비교할 때 극히 드물게 발생합니다 nil. 따라서 거의 암시됩니다. 누군가가 어떻게 든 반대되는 가정을하더라도, 실행하려고 할 때 무슨 일이 일어나고 있는지 즉시 이해할 것입니다.
NilClass제공된 #to_i메소드를 활용하면 nil값에 대해 0을 리턴 합니다.
unless discount.to_i.zero?
# Code here
end
경우 discount분수 일 수있다, 당신이 사용할 수있는 #to_f제로로 반올림되는 수를 방지하기 위해, 대신.
"".to_i == "foo".to_i == "0".to_i == 0. 당신의 방법은 모든 종류의 의도하지 않은 유형의 강제를 만들 것입니다. 또한 NoMethodErrorif에 discount응답하지 않으면 실패 합니다 to_i.
def is_nil_and_zero(data)
data.blank? || data == 0
end
""를 전달하면 빈 값으로 false를 반환합니까? true를 반환합니다. data = false 빈 경우와 동일합니까? nil, false, empty 또는 공백 문자열에 대해 true를 반환합니다. 그래서 공백을 사용하는 것이 낫습니까? 빈 문자열을 피하는 방법.
blank?레일 전용 방법이며 바닐라 루비에서는 사용할 수 없습니다.
if discount.nil? || discount == 0
[do something]
end
다른 해결책은 다음과 같이 구체화를 사용하는 것입니다.
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
다음은 루비 코드에 충분하다고 생각합니다. 나는 이것과 원본의 차이점을 보여주는 단위 테스트를 작성할 수 없다고 생각합니다.
if discount != 0
end
truediscount가 인 경우 평가됩니다 nil.