2016-02-09 27 views
5

Ben ifade aşağıdaki Ruby ettik:İlk koşul başarısız olursa, değişkene varsayılan değer nasıl atanır?

env = opts.env || "staging"

Nasıl iksiri yazmayı?

DÜZENLEME:

Elixir'in geçen bu ifade çalışmaz:

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

Hata:

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

Ben senin Hata senin dolaş env denilen hayır "üyesi" olduğunu bildiren düşünüyorum - anahtar kelime: env yolu iksiri etiketleri olduğunu "üye". IO.inspect opts – GavinBrelstaff

cevap

8

aynı deyim işleri ("başarısız" tarafından varsayarak Şunu opts.env, nil):

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

Elixir, Ruby olarak, Nil'i bir falsi değer olarak ele alır.

+0

kullanarak kontrol edebilirsiniz. Bu yüzden '' '' ** (KeyError) anahtarıyla changeset yapmaya çalıştığımda şu hatayı alıyorum: env bulunamadı:% Myapp.App {__ meta__: # Ecto.Schema .Metadata <:loaded> ... '' ' – leon

+0

Çalışıyor, şemaya env alanını eklemek zorundaydım. – leon

1

Bütünlük adına bu da istediğini yapardın:

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" 
İlgili konular