2013-02-08 4 views
2

Je travaille sur une application qui a le code ci-dessous:Rails segment de code explique

def app 
    @app ||= begin 
    if !::File.exist? options[:config] 
     abort "configuration #{options[:config]} not found" 
    end 

    app, myoptions = Rack::Builder.parse_file(self.options[:config], opt_parser) 
    self.myoptions.merge! myoptions 
    app 
    end 
end 

Je me bats pour obtenir ma tête autour de plusieurs parties de celui-ci ..

@app||= begin...end 

Est-ce que cela veut dire que si @app n'existe pas, le bloc est exécuté?

app ,options = rack::builder 

Que fait la virgule?

S'il vous plaît aider

Répondre

2

Vos premières hypothèses était correcte, il ne dit que si @app est nul, fixé à tout ce qui est de retour dans le bloc délimité par begin, end.

En ce qui concerne la virgule, il fonctionne comme ceci:

avar, bvar = "atest", "btest" 

Si vous regardez la source de Rack:Builder.parse_file alors vous remarquerez la dernière ligne

return app, options 

Il retourne deux valeurs.

espoir qui aide

1

@ Craig-Taub ansewered la question,
Je veux juste ajouter quelques notes:

commandes Ruby sont des expressions qui signifie qu'ils retournent valeur et vous pouvez les assigner à des variables.
Vous pouvez en savoir plus sur les expressions et les instructions sur Wikipedia et PragProg.

Deuxièmement, lorsque vous renvoyez plusieurs valeurs dans un bloc de code, Ruby l'enveloppe dans un tableau simple et le renvoie à l'appelant. C'est pourquoi ça marche comme ça.

+0

merci beaucoup Jani vraiment apprécier toutes ces informations –

+0

Vous êtes le copain de bienvenue, heureux codage :-) –

Questions connexes