gpt4 book ai didi

elixir - 映射函数中的参数

转载 作者:行者123 更新时间:2023-12-05 01:44:03 25 4
gpt4 key购买 nike

我正在学习 Elixir ,有一件事我不明白你看到 map 作为函数参数的风格。您最常看到的地方是在这样的 Controller 中:

Controller
def create(conn, %{"league" => league_params}) do
league = %League{}
|> League.changeset(league_params)
|> Repo.insert()

case league do
{:ok, league} ->
conn
|> put_flash(:info, "League Created Successfully.")
|> redirect(to: page_path(conn, :index))
{:error, %Ecto.Changeset{} = changeset} ->
render(conn, "new.html", changeset: changeset)
end
end

因此,create/2 函数。第二个参数看起来像这样 %{"league"=> league_params}。如果我错了请纠正我,但那是一张 map ,那么为什么我们引用 League.changeset(league_params) 下面的值而不是键 League.changeset("league")

这似乎是一个愚蠢的问题,但我无法弄清楚这个问题,也找不到这个问题的文档。感谢您的帮助。

最佳答案

在映射模式中,键是与映射键匹配的值,值是绑定(bind)该键值的模式。例如,模式 %{"foo"=> x} 将成功匹配 map %{"foo"=> 123} 并且作为匹配的结果,变量 x 将绑定(bind)到 123

同样,在您的示例中,league_params 将绑定(bind)到 params map 的 "league" 键的值,这就是为什么 league_params 传递给变更集。该代码几乎等同于在函数体中执行 def create(conn, params) 然后执行 league_params = params["league"]。 (几乎是因为如果该值不存在,模式匹配将失败,但此代码会将 league_params 设置为 nil。)

关于elixir - 映射函数中的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47405005/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com