Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Elixir 理解模式匹配和管道操作符_Elixir - Fatal编程技术网

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您正在混合元组
    {…}
    和映射
    %{…}
    。后者是关键价值。