2011-09-19 2 views
3

와 문 :루비 스위치 내가 예상대로이 스위치 문이 작동하지 않는 몇 가지 이유를 들어 문자열

aString = "DATE MODIFIED" 

case aString 
    when "DATE MODIFIED" 
    => Never gets here 
end 

그러나이 작품은

aString = "DATE" 
case aString 
    when "DATE" 
    => Does get here 
end 

사람은 이유를 설명하고 사용하는 방법을 제공 할 수 스위치 내부에 공백이있는 문자열? 마찬가지로 척 그의 주석에서 언급

감사

+5

질문하는 동작을 복제 할 수 없습니다. 나는 당신의 코드를 가져 와서 when-clause을 채우고 달아서 잘 동작했다. 문제를 나타내는 실제, 실행 가능한 코드를 게시 할 수 있습니까? – Chuck

답변

7

, 나는 당신에 대해 요구하고 동작을 복제 할 수 없습니다.

다음과 같은 오류의 가능한 원인 중 하나 : DATE와 MODIFIED 사이에 하나 이상의 공백이 있습니다.

솔루션 일 : 정규 표현식 확인 :

[ 
    "DATE MODIFIED", 
    "DATE MODIFIED", #2 spaces 
].each{|aString| 
    print "Check #{aString}: " 
    case aString 
     when "DATE MODIFIED" 
     puts "Exact hit with one space" 
     #without \A/\Z the string could be part of a longer String 
     when /\ADATE\s+MODIFIED\Z/ 
     puts "hit with one or more spaces" 
    end 
} 

또 다른 자주 만들어 오류 : 문자열은 표준 입력에서 읽고 줄 바꿈을 포함한다. 해결책 : String#chomp (또는 앞뒤 공백을 무시하려는 경우 String#split)을 사용하여 정규 표현식을 사용하십시오.

+0

감사합니다 knut! 그 이중 공간을 확인했지만 응용 프로그램이 다르다는 것을 맹세합니다. = (시간 내 주셔서 감사합니다. – scott

관련 문제