2016-02-09 94 views
5

我在紅寶石下面的表達式:如何在第一個條件失敗時將默認值分配給變量?

env = opts.env || "staging"

怎麼寫的靈藥?

編輯:

在花好月圓這個表達式將無法正常工作:

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

錯誤:

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

我覺得你的錯誤是在告訴你,你的OPTS沒有「成員」叫ENV - 關鍵字:ENV是這樣的靈藥的標籤, 「會員」。你可以檢查使用IO.inspect選擇 – GavinBrelstaff

回答

8

完全相同的成語作品(以 「失敗」 假設你的意思opts.env爲零):

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

作爲Ruby,Elixir將零視爲虛假價值。

+0

所以我有以下錯誤,當我試圖這樣做與變更'''**(KeyError)鍵:env找不到:%Myapp.App {__ meta__:#Ecto.Schema 。元數據<:loaded> ...''' – leon

+0

它正在工作,我不得不將env字段添加到模式中。 – leon

1

爲了完整起見,這也將做你想要的:

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" 
相關問題