IT story

루비에서 변수가 nil이 아니고 0이 아닌지 확인

hot-time 2020. 4. 8. 08:01
반응형

루비에서 변수가 nil이 아니고 0이 아닌지 확인


변수가 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

일반적인 면책 조항에주의하십시오 : 강력한 힘 / 책임, 어두운면으로 이어지는 원숭이 패치 등.


[nil, 0] .include? (할인)이 아닌 한 
  # ...
종료

5 년이 지난 후 ....

if discount.try :nonzero?
  ...
end

이 노트에 중요 try그것이 일반 루비에서 사용할 수 없습니다 있도록 ActiveSupport 보석에 정의되어 있습니다.


Ruby 2.3.0부터 안전한 탐색 연산자 ( &.) 와을 결합 할 수 있습니다 Numeric#nonzero?. 인스턴스가 있었고 -숫자 인 경우를 &.반환 nil합니다 .nilnonzero?0

if discount&.nonzero?
  # ...
end

또는 접미사 :

do_something if discount&.nonzero?

if (discount||0) != 0
  #...
end

당신은 이것을 할 수 있습니다 :

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

경우 때문에 순서는 여기에 중요 discount하다 nil, 다음은 없을 것이다 zero?방법을. 그러나 Ruby의 단락 평가는 is discount.zero?이면 평가하려고하지 않아야합니다 .discountnil


빈 행을 정수 값으로 변환하고 0을 확인할 수 있습니다.

"".to_i.zero? => true
nil.to_i.zero? => true

if discount and discount != 0
  ..
end

업데이트는 것입니다 false위해 할discount = false


NilClass제공된 #to_i메소드를 활용하면 nil값에 대해 0을 리턴 합니다.

unless discount.to_i.zero?
  # Code here
end

경우 discount분수 일 수있다, 당신이 사용할 수있는 #to_f제로로 반올림되는 수를 방지하기 위해, 대신.


def is_nil_and_zero(data)
     data.blank? || data == 0 
end  

""를 전달하면 빈 값으로 false를 반환합니까? true를 반환합니다. data = false 빈 경우와 동일합니까? nil, false, empty 또는 공백 문자열에 대해 true를 반환합니다. 그래서 공백을 사용하는 것이 낫습니까? 빈 문자열을 피하는 방법.


데이터베이스 레코드를 처리 할 때 마이그레이션 도우미를 사용하여 모든 빈 값을 0으로 초기화하고 싶습니다.

add_column :products, :price, :integer, default: 0

코드가 초기화되기 전에 시도하지 않고 사용하지 않는 한 할인을 0으로 초기화 할 수 있습니다. 그것은 내가 생각하는 하나의 수표를 제거 할 것이고, 나는 다른 것을 생각할 수 없습니다.


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

참고 URL : https://stackoverflow.com/questions/252203/checking-if-a-variable-is-not-nil-and-not-zero-in-ruby

반응형