2011-09-19 56 views
3

出於某種原因,如我所料該switch語句不表現:紅寶石switch語句處理字符串

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