2010-01-14 4 views
4

이것은 다른 어떤 것보다 의미론적인 질문입니다.Ruby에서 두 개의 다른 값에 대한 변수 비교

변수가 두 값 중 하나인지 확인하고 싶습니다. 이 작업을 수행하는 가장 쉬운 방법은 다음과 같습니다.

if var == "foo" || var == "bar" 
# or 
if var == 3  || var == 5 

그러나 이것은 나에게별로 말리지 않습니다. String.match()을 사용할 수는 있지만 문자열 변수가 아닌 경우에는 작동하지 않으며 3 배 느립니다.

두 값에 대해 변수를 검사하는 더 좋은 방법이 있습니까?

답변

14

모든 값을 배열에 넣으면 쉽게 처리 할 수 ​​있습니다.

%w[foo bar].include?('foo') # => true 

[3,5].include?(3) # => true 
+1

if 문이 누락되었습니다. if (% w [foo bar] .include? (var)) –

+0

그래, 질문을 게시하자마자 바로이 작업을 수행 할 수 있음을 깨달았습니다. 감사! – vonconrad

1

당신은 할 수 :

%W(foo bar baz).include? var 

또는를 :

[3, 5].include? var 
5

case 사항이 원하는 것을 할 것 같다.

case var 
    when "foo", "bar" then case1() 
end 

case var 
    when 3, 5 then case2() 
end 

배열 기반 방법은 이보다 느릴 수 있습니다.

+0

사례 표기법은 각각의 when 문에 대해'# ==='를 사용하는 것만으로 끝나기 때문에'if [ "foo", "bar"] === var then case1(); elsif [3,5] === var then case2(); end' – rampion

+0

이 방법의 속도를 동등한'.include? '방법과 비교해 보았습니다.'case'가 약간 빨랐습니다. 그러나 설득력있는 주장을하기에는 충분하지 않습니다. –

+0

이 접근법에 대한 한 가지 문제점은 단 한 줄의'if [1,2] .include? (1)'보다 너무 복잡하다는 것입니다. 나는'case'가 여러 개의 if와 elsif 구문을 대신하여 잘 작동하지만, 이와 같은 간단한 것은 아니라는 점에 동의한다. – vonconrad