我想弄清楚一種方法來檢查Phoenix應用程序(使用Elixir)中的參數哈希是否具有特定的密鑰。Elixir映射檢查是否爲空並且存在密鑰
在模型中的下面的changeset函數中,參數缺省爲:空。
def changeset(model, params \\ :empty) do
我需要弄清楚是否存在一個名爲:username的密鑰。
我想弄清楚一種方法來檢查Phoenix應用程序(使用Elixir)中的參數哈希是否具有特定的密鑰。Elixir映射檢查是否爲空並且存在密鑰
在模型中的下面的changeset函數中,參數缺省爲:空。
def changeset(model, params \\ :empty) do
我需要弄清楚是否存在一個名爲:username的密鑰。
只是一個小術語的東西,params是一個地圖,而不是散列。當知道在文檔中查找的位置時,這是相關的。
有地圖的有has_key?/2,它返回true
或false
。
Map.has_key?(params, :name)
由於您使用的是Ecto變更集,因此您也可以使用Ecto.Changeset.get_change/3。
get_change(changeset, key, default \\ nil)
這將返回default
如果key
沒有設置。請注意,如果key
設置爲nil
,則仍會返回nil
。如果nil
是您更改的允許值,那麼您可能需要設置不同的默認參數。
Gazeler的回答顯然非常好。我只會在混合中添加模式匹配,因爲在我看來,這是最清晰的解決方案,不僅適用於鳳凰,而且適用於Elixir中的任何地圖。
# head-only declaration for default params
def changeset(model, params \\ :empty)
def changeset(model, %{"username" => _} = params) do
# username field is in params
end
def changeset(model, params) do
# username is not in params
end