2016-02-09 21 views
5

mam w Ruby następujące wyrażenia:Jak przypisać wartość domyślną do zmiennej, jeśli pierwszy warunek nie powiódł się?

env = opts.env || "staging"

Jak napisać to w Elixir?

EDIT:

To wyrażenie w Elixir nie zadziała:

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

Błąd:

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

Myślę, że błąd jest informacją, że opts ma „członkiem” o nazwie ENV - słowo kluczowe: env jest Etykiety sposób eliksir że "członek". Możesz sprawdzić przy użyciu IO.inspect opts – GavinBrelstaff

Odpowiedz

8

Dokładne same prace idiom (zakładając, że przez "failed" masz na myśli opts.env is nil):

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

Eliksir, jako Rubin, traktuje zero jako wartość falsyfikacji.

+0

Mam następujący błąd, gdy próbuję to zrobić z kluczem setset '' '** (KeyError): env nie znaleziono w:% Myapp.App {__ meta__: # Ecto.Schema .Metadata <:loaded> ... '' ' – leon

+0

Działa, musiałem dodać pole env do schematu. – leon

1

W trosce o kompletność to również zrobić to, co chcesz:

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"