2017-12-27 16 views
1

Was ist der Unterschied zwischen diesen beiden Syntax:Rails: Unterschied zwischen ENV.fetch() und ENV []

ENV.fetch("MY_VAR")

ENV['MY_VAR']

I Rails 5 verwenden beide Versionen davon gesehen haben an verschiedenen Orten und kann nicht herausfinden, was der Unterschied ist (abgesehen von der ersten ist mehr Zeichen zu tippen).

+0

Ihre Frage ist unklar. Sie * fragen explizit nach der * Syntax *, aber Sie haben eine Antwort akzeptiert, die die Syntax überhaupt nicht erklärt und nur über die * Semantik * spricht. –

+0

@ JörgWMittag Es ist ziemlich klar für alle anderen, was sie fragen, nicht jeder konsultiert ein Wörterbuch, wenn er eine Frage stellt. Sie können gerne Ihre eigene Antwort angeben, wenn Sie Ihre Englischkenntnisse beherrschen müssen. –

Antwort

9

Das Hash-ähnliche Objekt ENV ist ein einfacher Ruby, nicht Teil von Rails. Vom fine ENV#[] manual:

Ruft den Wert für die Umgebungsvariable name als String. Gibt nil zurück, wenn die benannte Variable nicht existiert.

und die fine ENV#fetch manual:

Ruft die Umgebungsvariable name.

Wenn der angegebene Name nicht existiert und weder default noch ein Block a zur Verfügung gestellt wird, wird ein IndexError ausgelöst. Wenn ein Block angegeben wird, wird er mit dem fehlenden Namen aufgerufen, um einen Wert anzugeben. Wenn ein Standardwert angegeben wird, wird er zurückgegeben, wenn kein Block angegeben wird.

So wie Hash#[] und Hash#fetch, ist der einzige Unterschied, dass fetch Sie das Verhalten angeben können, ob ein Schlüssel nicht gefunden wird (einen Standardwert fetch, Standardblock zu fetch oder zu erhöhen, eine Ausnahme bestanden bestanden verwenden) Während [] gibt Ihnen einfach nil im Hintergrund, wenn der Schlüssel nicht gefunden wird.

Im speziellen Fall von:

ENV.fetch("MY_VAR") 
ENV['MY_VAR'] 

der Unterschied ist, dass ENV['MY_VAR'] werden Ihnen nil geben, wenn es kein MY_VAR Umgebungsvariable ist aber ENV.fetch('MY_VAR') wird eine Ausnahme ausgelöst.

+0

Diese Antwort erklärt die * Semantik * von 'ENV :: fetch' und' ENV :: [] ', aber die Frage fragt explizit nach der * Syntax *. –

Verwandte Themen