gpt4 book ai didi

elixir - 为什么这个 elixir 函数中的下划线在这里?

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

通过 Programming Phoenix本书,我看到一个函数,如:

defp put_pass_hash(changeset) do
case changeset do
%Ecto.Changeset{valid?: true, changes: %{password: pass}} ->
put_change(changeset, :password_hash, Comeonin.Bcrypt.hashpwsalt(pass))
_ ->
changeset
end
end

“_”符号在那里做什么?

最佳答案

通常在 Elixir 中,当你在模式匹配中使用 _ 时,你并不关心这个值。例如:

 {_ , data} = {:ok, body}
data = body # true

我不想把这个 :ok 原子放在任何地方,所以在模式匹配中我把它留了下来。

模式匹配用于caseCas e 在不同的编程语言中只是switch。您可以为一个变量中的预期值创建多个案例。在 case 中使用 _ 时,通常将其作为 case 的最后一个模式匹配,因为它匹配之前所有未覆盖的 case

例如:

def do_i_know_you(name) do
case name do
"Molly" -> "Hi Molly"
"Tom" -> "Hi Tom"
_ -> "I don't know who you are"
end
end

在您的特定案例 中,它会检查您的变更集是否有效以及变更是否与添加的密码相关。如果是这样,只需根据您的密码放入此变更集 password_hash。如果不是,则返回未更改的变更集。

你可以很容易地在这里应用 if do end,但是 casecond 在 Elixir 和 Phoenix 中通常是首选的。

关于elixir - 为什么这个 elixir 函数中的下划线在这里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38821781/

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