2010-11-04 11 views
0

questions aléatoires de rails/ruby ​​pour un nooby, très apprécié. Confus quant à ce que le second '?' des moyens dans la ligne:Que signifie "?" faire? Qu'est-ce que __FILE__?

@page ||= params[:page].blank? ? 1 : params[:page].to_i 

Dans les fichiers init.rb, qu'est-ce que FILE vraiment faire?

require File.join(File.dirname(__FILE__), "rails", "init") 
+3

Si vous avez deux questions distinctes, demandez-leur dans des questions distinctes, même si elles semblent triviales. –

Répondre

7

Le premier? fait partie du nom de la méthode, une convention utilisée pour les méthodes qui retournent un résultat booléen.

La seconde? est l'opérateur en ligne conditionnel:

a ? b : c 

est équivalent à

if a then 
    b 
else 
    c 
end 

__FILE__ est une fonction du noyau qui retourne le nom du fichier en cours. File.dirname(__FILE__) serait tout simplement retourner le nom du répertoire du fichier en cours, et File.join est le même que Array#join avec le seperator de répertoire spécifique OS (/ sous Linux/OSX et \ sous Windows)

+0

donc sa jointure .../init_folder/rails et ../init_folder/init ou? – Blankman

+3

Pas si ... le résultat sera '/ init_folder/rails/init'. Par exemple, 'File.join (" mon "," très "," profond "," dossier ")' résultera en '/ mon/très/profond/dossier 'ou' mon \ très \ profond \ dossier \, en fonction de l'OS. – Voldy

3

1) Il est une expression ternaire, la deuxième marque de question est essentiellement « alors », le côlon après un sens essentiellement « else ». pourrait être réécrite tout cela:

if params[:page].blank? 
    1 
else 
    params[:page].to_i 
end 

2) __FILE__ est une référence au fichier en cours, dans ce cas init.rb.

+0

ah, alors le premier? fait juste partie du nom de la méthode, d'accord. – Blankman

+0

yup, 'blank?' Est le nom complet de la méthode. – William

+0

+1 pour utiliser le terme correct 'ternaire'. Juste une petite correction: on l'appelle l'opérateur ternaire plutôt que l'expression ternaire. – Zabba