
- Elixir 教程
- Elixir - 首頁
- Elixir - 概述
- Elixir - 環境
- Elixir - 基本語法
- Elixir - 資料型別
- Elixir - 變數
- Elixir - 運算子
- Elixir - 模式匹配
- Elixir - 決策
- Elixir - 字串
- Elixir - 字元列表
- Elixir - 列表和元組
- Elixir - 關鍵字列表
- Elixir - 對映
- Elixir - 模組
- Elixir - 別名
- Elixir - 函式
- Elixir - 遞迴
- Elixir - 迴圈
- Elixir - 可列舉
- Elixir - 流
- Elixir - 結構體
- Elixir - 協議
- Elixir - 檔案 I/O
- Elixir - 程序
- Elixir - 符號
- Elixir - 推導式
- Elixir - 型別規範
- Elixir - 行為
- Elixir - 錯誤處理
- Elixir - 宏
- Elixir - 庫
- Elixir 有用資源
- Elixir - 快速指南
- Elixir - 有用資源
- Elixir - 討論
Elixir - 模式匹配
模式匹配是 Elixir 從 Erlang 繼承的一項技術。它是一種非常強大的技術,允許我們從複雜的結構(如列表、元組、對映等)中提取更簡單的子結構。
匹配有兩個主要部分,左邊和右邊。右邊是任何型別的結構。左邊嘗試匹配右邊的結構,並將左邊任何變數繫結到右邊的相應子結構。如果找不到匹配項,運算子將引發錯誤。
最簡單的匹配是左邊是一個單獨的變數,右邊是任何結構。此變數將匹配任何內容。例如,
x = 12 x = "Hello" IO.puts(x)
您可以在結構中放置變數,以便捕獲子結構。例如,
[var_1, _unused_var, var_2] = [{"First variable"}, 25, "Second variable" ] IO.puts(var_1) IO.puts(var_2)
這將把值{"First variable"}儲存在var_1中,並將"Second variable"儲存在var_2中。還有一個特殊的_變數(或以'_'為字首的變數),它的作用與其他變數完全相同,但它告訴 elixir,“確保這裡有一些東西,但我並不關心它到底是什麼。”。在前面的示例中,_unused_var 就是這樣的一個變數。
我們可以使用此技術匹配更復雜的模式。例如,如果您想解包並在一個元組中獲取一個數字,該元組在一個列表中,該列表本身又在一個列表中,您可以使用以下命令:
[_, [_, {a}]] = ["Random string", [:an_atom, {24}]] IO.puts(a)
上述程式生成以下結果:
24
這將把a繫結到 24。其他值被忽略,因為我們使用了'_'。
在模式匹配中,如果我們在右邊使用變數,則使用其值。如果要使用左邊變數的值,則需要使用固定運算子。
例如,如果您有一個值為 25 的變數“a”,並且希望將其與另一個值為 25 的變數“b”匹配,則需要輸入:
a = 25 b = 25 ^a = b
最後一行匹配a的當前值,而不是將其賦值給b的值。如果我們有一組不匹配的左右兩側,匹配運算子將引發錯誤。例如,如果我們嘗試將元組與列表匹配,或者將大小為 2 的列表與大小為 3 的列表匹配,則會顯示錯誤。
廣告