2010-08-19 7 views
0

J'ai ce bloc Ruby:Pourquoi je ne peux pas sortir de ce bloc 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 

Pour une raison inconnue pour moi, je ne peux pas sembler sortir de celui-ci? Je me rends compte du bloc est un peu bizarre, il est semi-copié à partir d'ici:

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

Honnêtement mon Ruby est pauvre, mais je suis en train d'écrire une petite application mac qui implique une analyse de RSS.

Les correspondances de regex et l'état sont réglés sur "FAILURE" mais n'éclatent pas le bloc/la boucle. Est-ce que je fais quelque chose qui ne va pas?

Cheers,

Adam

+1

Où se trouve la boucle? –

+0

Ah je vois ... Je l'ai réécrit. –

Répondre

4

vous ne avez pas besoin du 'puis' dans votre si bloc

@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 

comme une note de côté, il serait plus idiomatiques à écrire comme:

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

Lorsque vous traitez avec des objets énumérables, comme les tableaux, il est bon d'utiliser les outils intégrés dans Ruby.

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

+0

Ce n'est pas strictement la réponse mais j'apprécie la réécriture idiomatique. –

+0

Eh bien, je suppose que la réponse stricte est que votre if si la syntaxe était vissée votre boucle si. –

1

Essayez break if status == "FAILURE"

+0

Ne semble pas fonctionner non plus. Merci quand même. –

Questions connexes