为什么我不能打破这个Ruby块?

时间:2010-08-19 21:45:26

标签: ruby

我有这个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很差,但我正在尝试编写一个涉及RSS解析的小应用程序。

正则表达式匹配和状态设置为“FAILURE”但它不会突破块/循环。我做了一件明显不对的事吗?

干杯,

亚当

2 个答案:

答案 0 :(得分:4)

你不需要if块中的'then'

@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

答案 1 :(得分:1)

尝试break if status == "FAILURE"