我很难理解以下代码段:
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
但是我想一旦我了解了如何解构模式匹配就可以了吗?
答案 0 :(得分:2)
使用
|>
时传递给第二个函数的参数顺序,是否总是总是作为第一个参数传递给函数? 如果需要将其作为第二个参数传递给函数怎么办?
是的,它总是作为第一个参数传递。如果需要将其作为第二个参数传递,则无需使用管道。
如何模式匹配和解构返回值
result =
"hello123"
|> Comeonin.Argon2.add_hash()
|> Comeonin.Argon2.check_pass("hello123")
在不期望得到响应的情况下解构并提高
{: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