Elixir 语言 基础模式匹配应用示例

Elixir阿木 发布于 2025-06-19 7 次阅读


Elixir 语言基础模式匹配应用示例

Elixir 是一种函数式编程语言,它运行在 Erlang 虚拟机(BEAM)上。Elixir 的设计哲学强调简洁、可读性和并发处理能力。模式匹配是 Elixir 中一个强大的特性,它允许开发者以清晰和高效的方式处理数据结构。本文将围绕 Elixir 语言的基础模式匹配应用,通过一系列示例来展示其用法和优势。

模式匹配简介

模式匹配是 Elixir 中的一种特殊语法,它允许开发者将数据结构与一系列模式进行匹配,并根据匹配结果执行相应的代码块。这种语法在函数定义、变量赋值和条件判断中都有广泛应用。

模式匹配的基本语法

elixir

case expression do


pattern1 -> result1


pattern2 -> result2


...


patternN -> resultN


_ -> default_result


end


在这个语法中,`expression` 是要匹配的表达式,`pattern1` 到 `patternN` 是一系列模式,`result1` 到 `resultN` 是对应的执行结果,`default_result` 是当没有匹配到任何模式时执行的默认结果。

模式匹配的类型

1. 原子模式:匹配单个原子,如 `:ok`、`:error` 等。

2. 列表模式:匹配列表,如 `[head | tail]` 匹配列表的第一个元素和剩余部分。

3. 元组模式:匹配元组,如 `{a, b}` 匹配元组的两个元素。

4. 结构体模式:匹配自定义结构体,如 `%User{name: name, age: age}`。

5. 通配符模式:匹配任何值,如 `_`。

模式匹配应用示例

1. 函数定义

模式匹配在函数定义中非常有用,可以减少冗余代码并提高可读性。

elixir

defmodule Math do


def sum({a, b}), do: a + b


def sum({a, b, c}), do: a + b + c


def sum(a), do: a


end

调用示例


Math.sum({1, 2}) 结果为 3


Math.sum({1, 2, 3}) 结果为 6


Math.sum(5) 结果为 5


2. 变量赋值

模式匹配可以用于变量赋值,从而简化代码。

elixir

[head | tail] = [1, 2, 3, 4, 5]


IO.puts(head) 输出 1


IO.inspect(tail) 输出 [2, 3, 4, 5]


3. 条件判断

模式匹配可以用于条件判断,使代码更加简洁。

elixir

case {a, b} do


{1, 2} -> IO.puts("a is 1 and b is 2")


{_, _} -> IO.puts("a and b are not 1 and 2")


end


4. 结构体模式

模式匹配可以用于匹配自定义结构体,从而方便地访问结构体的字段。

elixir

defmodule User do


defstruct name: "", age: 0


end

defmodule UserManager do


def greet(%User{name: name, age: age}) do


IO.puts("Hello, {name}. You are {age} years old.")


end


end

创建 User 结构体实例


user = %User{name: "Alice", age: 30}


UserManager.greet(user) 输出 Hello, Alice. You are 30 years old.


5. 递归模式匹配

模式匹配可以用于递归处理数据结构。

elixir

defmodule ListProcessor do


def sum(list), do: _sum(list, 0)

defp _sum([], acc), do: acc


defp _sum([head | tail], acc), do: _sum(tail, acc + head)


end

调用示例


ListProcessor.sum([1, 2, 3, 4, 5]) 结果为 15


总结

模式匹配是 Elixir 语言中一个强大的特性,它可以帮助开发者以简洁、高效的方式处理数据结构。通过本文的示例,我们可以看到模式匹配在函数定义、变量赋值、条件判断、结构体模式和递归处理中的应用。熟练掌握模式匹配,将使你的 Elixir 代码更加优雅和高效。