2016-02-09 12 views
5

Ich habe in Ruby folgenden Ausdruck:Wie kann der Variable der Standardwert zugewiesen werden, wenn die erste Bedingung fehlgeschlagen ist?

env = opts.env || "staging"

Wie es in Elixir zu schreiben?

EDIT:

Dieser Ausdruck in Elixir wird nicht funktionieren:

case Repo.insert(changeset) do 
    {:ok, opts} -> 
    env = opts.env || "staging" 

Fehler:

** (KeyError) key :env not found in: %Myapp.App{__meta__: #Ecto.Schema.Metadata<:loaded> 
+0

Ich denke, Ihr Fehler ist Ihnen zu sagen, dass Ihr entscheidet sich kein „Mitglied“ genannt env hat - das Stichwort: env ist die Art und Weise Elixier Etiketten, "Mitglied". Sie könnten überprüfen, mit IO.inspect opts – GavinBrelstaff

Antwort

8

Die exakt gleichen Idiom Werke (unter der Annahme von "nicht bestanden" Sie bedeuten opts.env ist null):

iex(1)> nil || "staging" 
"staging" 
iex(2)> "production" || "staging" 
"production" 

Elixier, wie Ruby, behandelt Null als ein falscher Wert.

+0

So habe ich folgenden Fehler, wenn ich dies mit Changeset '' '** (KeyError) -Schlüssel versuchen: env nicht gefunden in:% Myapp.App {__ meta__: # Ecto.Schema .Metadata <:loaded> ... '' ' – leon

+0

Es funktioniert, ich musste env-Feld zum Schema hinzufügen. – leon

1

Der Vollständigkeit halber würde dies auch tun, was Sie wollen:

e = "production" # Setting this only because I don't have an opts.env in my app. 

env = if !e, do: "staging", else: e 
#"production" 

e = nil 

env = if !e, do: "staging", else: e 
#"staging" 
Verwandte Themen