2010-08-19 36 views
0

我有這種紅寶石塊:爲什麼我不能從這個Ruby塊中'破壞'?

status = '' 
    build.parse do |entry| 
     puts "parsing an item" 
     puts entry.title 

     if entry.title =~ /FAILURE/ then 
      puts "failure" 
      status = "FAILURE" 
     else 
      status = "SUCCESS" 
     end 
     puts status 
     break entry if status == "FAILURE" 
    end 

對於一些未知的原因給我,我似乎無法擺脫它?我知道該塊是一點都不奇怪它是半抄在這裏:

http://macruby.labs.oreilly.com/ch03.html#_xml_parsing

老實說我的Ruby是窮人,但我試圖寫一個小Mac應用程序,涉及到一些RSS解析。

正則表達式匹配和狀態被設置爲「FAILURE」,但它沒有打破塊/循環。我做了什麼明顯錯誤?

乾杯,

亞當

+1

哪裏有循環? – 2010-08-19 22:01:51

+0

啊,我明白了...我已經改寫過了。 – 2010-08-19 22:12:36

回答

4

你不需要的 '然後' 你如果塊

@entries = ["this is a FAILURE", "this is a success"] 
status = '' 
@entries.each do |entry| 
    if entry =~ /FAILURE/ 
    puts "failure" 
    status = "failure" 
    else 
    status = "success" 
    end 
    puts "status == #{status}" 
    break if status == "failure" 
end 

一個側面說明,這將是更地道來把它寫成:

status = @entries.any?{|e| e =~ /FAILURE/} ? 'failure' : 'succes' 

當您處理可枚舉對象時,如使用Ruby中內置的工具很好。

http://apidock.com/ruby/Enumerable/any%3F

+0

這不是嚴格的答案,但我很欣賞慣用的重寫。 – 2010-08-21 13:32:55

+0

好吧,我想嚴格的答案是,你的if..then語法搞砸了你的if循環。 – 2010-08-21 15:29:03

1

嘗試break if status == "FAILURE"

+0

似乎也無法正常工作。不過謝謝。 – 2010-08-19 21:55:35

相關問題