변수가 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
합니다 .nil
nonzero?
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
. 당신의 방법은 모든 종류의 의도하지 않은 유형의 강제를 만들 것입니다. 또한 NoMethodError
if에 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
true
discount가 인 경우 평가됩니다 nil
.