Elixir 理解模式匹配和管道操作符
我很难理解以下代码片段:Elixir 理解模式匹配和管道操作符,elixir,Elixir,我很难理解以下代码片段: Comeonin.Argon2.add_hash("hello123") |> Comeonin.Argon2.check_pass("hello123") 哪些产出: {:ok, %{ password: nil, password_hash: "$argon2i$v=19$m=65536,t=6,p=1$thCv1TGdiLszGx+bRugcqQ$EH8PpUqpCGTevihslOdSRPWS6+UlQJwv2pMOvwBJUS4" }}
Comeonin.Argon2.add_hash("hello123") |> Comeonin.Argon2.check_pass("hello123")
哪些产出:
{:ok,
%{
password: nil,
password_hash: "$argon2i$v=19$m=65536,t=6,p=1$thCv1TGdiLszGx+bRugcqQ$EH8PpUqpCGTevihslOdSRPWS6+UlQJwv2pMOvwBJUS4"
}}
我想了解两件事:
Comeonin.Argon2.add_hash("hello123")
%{
password: nil,
password_hash: "$argon2i$v=19$m=65536,t=6,p=1$GCmClx6W8PyzKjvh3UcKYQ$d3IMfhiEULCmMBuMF7eyBYgkPrXCBQdqQNOJNGr/3qI"
}
所以它返回了一张地图。
我怎样才能将模式与此匹配
为什么这样不行
{a, b} = Comeonin.Argon2.add_hash("hello123")
或者如果我想忽略第一个键:
{_, b} = Comeonin.Argon2.add_hash("hello123")
对于模式匹配,我尝试了以下方法:
case Comeonin.Argon2.add_hash("hello123") do
{password, password_hash} -> ...
end
但我想一旦我理解了如何解构模式匹配,会是一样的吗
使用|>
时传递给第二个函数的参数顺序,它是否总是作为第一个参数传递给函数如果需要将其作为第二个参数传递给函数,该怎么办?
是的,它总是作为第一个参数传递。如果需要将其作为第二个参数传递,则不使用管道
如何对返回值进行模式匹配和解构 如果响应不是预期的,则解构并提出
{:ok, %{password: password, password_hash: password_hash}} = result
要处理任何可能的响应:
case result do
{:ok, %{password: password, password_hash: password_hash}} -> ...
_ -> :error
end
要匹配模式并返回任何成功响应,请执行以下操作:
case result do
{:ok, %{} = password_map} -> password_map
_ -> :error
end
使用|>
时传递给第二个函数的参数顺序,它是否总是作为第一个参数传递给函数如果需要将其作为第二个参数传递给函数,该怎么办?
是的,它总是作为第一个参数传递。如果需要将其作为第二个参数传递,则不使用管道
如何对返回值进行模式匹配和解构 如果响应不是预期的,则解构并提出
{:ok, %{password: password, password_hash: password_hash}} = result
要处理任何可能的响应:
case result do
{:ok, %{password: password, password_hash: password_hash}} -> ...
_ -> :error
end
要匹配模式并返回任何成功响应,请执行以下操作:
case result do
{:ok, %{} = password_map} -> password_map
_ -> :error
end
注意,您正在混合元组{…}
和映射%{…}
。后者是key-value.NB您正在混合元组{…}
和映射%{…}
。后者是关键价值。