2010-08-12 4 views
1

Un gem/plugin que j'utilise pour prendre en charge ma suite de tests appelle certaines commandes GNU qui entraînent le survol et la mort du shell Windows. Je peux réécrire ces fonctions avec un by-pass de cette façon:Comment faire un appel de fonction qui se produit une seule fois dans Ruby/Rails

def get_rake_output(task) 
    if RUBY_PLATFORM.include? 'mingw' 
    puts 'Skipped since OS is Windows. Run the test suite on a UNIX-like shell.' 
    '' 
    else 
    `./rake --silent #{task}` 
    end 
end 

Bien sûr, cela imprime le message à chaque fois que la fonction est appelée. Comment puis-je m'assurer qu'il ne s'affiche qu'une seule fois?

+3

L'utilisation variable d'instance de se rappeler si le message a été affiché déjà? –

Répondre

3

C'est la méthode dans ruby. </rant>. Utilisez une variable de classe comme @@warning_said et vérifiez celle-ci. Aka

puts "Ruby does not like Windows here" unless @@warning_said 
@@warning_said = true 

Je ne sais pas exactement dans quelle portée vous travaillez, mais cela devrait le faire.

+0

Cela va de soi. Merci! J'utilisais initialement des variables globales, mais cela a plus de sens. Bien sûr, la variable de classe doit être initialisée. –

3

le chemin rubis idiomatiques à gérer est de memoize il

@@warning_said ||= "warning" 
+2

+1 pour mentionner le mot mémoize. –

+0

Qu'est-ce que mémoize signifie ici? –

+0

https://www.justinweiss.com/articles/4-simple-memoization-patterns-in-ruby-and-one-gem/ –

Questions connexes