Quelle est la différence entre ces deux syntaxes:
ENV.fetch("MY_VAR")
ENV['MY_VAR']
J'ai vu Rails 5 utilise les deux versions de ceux-ci à des endroits différents et ne peux pas comprendre quelle est la différence (à part le premier étant plus de caractères à taper).
L'objet de type hachage ENV
est un Ruby simple, ne fait pas partie de Rails. Extrait du manuel fin ENV#[]
:
Récupère la valeur de la variable d'environnement
name
sous forme de chaîne. Renvoienil
si la variable nommée n'existe pas.
et le fin ENV#fetch
manuel :
Récupère la variable d'environnement
name
.Si le nom donné n'existe pas et ni
default
ni un bloc à condition qu'une IndexError soit levée. Si un bloc est donné, il est appelé avec le nom manquant pour fournir une valeur. Si une valeur par défaut est donnée, elle sera retournée quand aucun bloc n'est donné.
Donc, tout comme Hash#[]
et Hash#fetch
, la seule différence est que fetch
vous permet de spécifier le comportement si un la clé est introuvable (utilisez une valeur par défaut passée à fetch
, un bloc par défaut passé à fetch
, ou déclenchez une exception) tandis que []
vous donne simplement en silence nil
si la clé n'est pas trouvée.
Dans le cas particulier de:
ENV.fetch("MY_VAR")
ENV['MY_VAR']
la différence est que ENV['MY_VAR']
vous donnera nil
s'il n'y a pas de variable d'environnement MY_VAR
mais ENV.fetch('MY_VAR')
lèvera une exception.