模式

模式匹配 属于 Elixir

73 个练习

关于 模式匹配

编写 Elixir 函数时,我们可以采用断言式的风格,并结合模式匹配:

def read_file() do
  {:ok, contents} = File.read("hello.txt")
  contents
end
  • 模式匹配通过匹配运算符=/2显式完成。

    • 当运算符左侧数据的_形状_与右侧一致时,匹配成功。

    • 匹配成功时,左侧的变量会绑定到右侧的值。

    • 使用下划线_可以忽略对应位置的值。

      {:ok, number, _} = {:ok, 5, [4.5, 6.3]}
      number
      # => 5 is bound to this variable
      
    • 固定运算符^可以阻止变量被重新绑定,转而对它已有的值进行模式匹配。

      number = 10
      {:ok, ^number, _} = {:ok, 5, [4.5, 6.3]}
      # => ** (MatchError) no match of right hand side value: {:ok, 5, [4.5, 6.3]}
      
  • 模式匹配也可以出现在函数子句的头部,这样只有匹配该模式的参数才会调用该函数。

  • 变量可以在函数子句的模式匹配中绑定。

    defmodule Example do
      def named_function(:a = atom_variable) do
        {atom_variable, 1}
      end
    end
    
    Example.named_function(:a)
    # => {:a, 1}
    # The first function clause matches, so it is invoked
    
    Example.named_function(:b)
    # => ** (FunctionClauseError) no function clause matching in Example.named_function/1
    
通过 GitHub 编辑 该链接会在新窗口或标签页中打开

学习 模式匹配

练习已锁定

再解锁 10 个练习即可练习 模式匹配