programing tip

변수가 범위 내에 있는지 확인?

itbloger 2020. 6. 30. 20:55
반응형

변수가 범위 내에 있는지 확인?


다음과 같은 루프를 작성해야합니다.

if i (1..10)
  do thing 1
elsif i (11..20)
  do thing 2
elsif i (21..30)
  do thing 3
etc...

그러나 지금까지 구문 측면에서 잘못된 길을 갔다.


만약 사이에 있다면? (1, 10)
  일을 1 
elsif i.between? (11,20)
  일을 2 
...

===연산자 (또는 그 동의어 include?)를 사용하십시오.

if (1..10) === i

@Baldu가 말했듯이 === 연산자를 사용하거나 내부적으로 ===를 사용하는 유스 케이스 / 사용 :

case i
when 1..10
  # do thing 1
when 11..20
  # do thing 2
when 21..30
  # do thing 3
etc...

여전히 범위를 사용하려면 ...

def foo(x)
 if (1..10).include?(x)
   puts "1 to 10"
 elsif (11..20).include?(x)
   puts "11 to 20"
 end
end

일반적으로 다음과 같은 기능으로 훨씬 더 나은 성능을 얻을 수 있습니다.

if i >= 21
  # do thing 3
elsif i >= 11
  # do thing 2
elsif i >= 1
  # do thing 1

당신은 사용할 수 있습니다
if (1..10).cover? i then thing_1 elsif (11..20).cover? i then thing_2

과에 따라이 벤치 마크 빠른 루비 보다 더 빨리이다include?


질문에 대한 직접적인 대답은 아니지만 "내부"와 반대되는 것을 원할 경우 :

(2..5).exclude?(7)

진실


루비로 빌드 할 수있는보다 역동적 인 답변 :

def select_f_from(collection, point) 
  collection.each do |cutoff, f|
    if point <= cutoff
      return f
    end
  end
  return nil
end

def foo(x)
  collection = [ [ 0, nil ],
                 [ 10, lambda { puts "doing thing 1"} ],
                 [ 20, lambda { puts "doing thing 2"} ],
                 [ 30, lambda { puts "doing thing 3"} ],
                 [ 40, nil ] ]

  f = select_f_from(collection, x)
  f.call if f
end

따라서이 경우 "범위"는 경계 조건을 포착하기 위해 실제로는 0으로 묶여 있습니다.


문자열의 경우 :

(["GRACE", "WEEKLY", "DAILY5"]).include?("GRACE")

#=>true

참고URL : https://stackoverflow.com/questions/870507/determining-if-a-variable-is-within-range

반응형