📜  Elixir-变量(1)

📅  最后修改于: 2023-12-03 15:14:51.711000             🧑  作者: Mango

Elixir 变量

变量是 Elixir 的基本概念之一。在 Elixir 中,变量是不可变的(immutable),这意味着一旦变量被赋值,它的值就不会发生改变。变量的名称必须以小写字母或下划线开头,并且可以包含字母、数字、下划线和问号。

x = 1
y = "hello"
z = true

IO.puts x # 1
IO.puts y # "hello"
IO.puts z # true
匹配模式

在 Elixir 中,变量通常被用作模式匹配的一部分。这种匹配模式广泛应用于函数声明、case语句和with表达式等结构中。当一个变量被用作模式匹配中的目标时,Elixir 会尝试将其与一个值进行比较。如果匹配成功,则变量被绑定到该值上:

case {1, 2, 3} do
  {_, x, _} ->
    IO.puts x # 2
end

在这个例子中,case 语句中的模式匹配成功,并将变量 x 绑定到值 2 上。

变量作用域

变量的作用域指的是它可以被访问的范围。在 Elixir 中,变量的作用域是由封闭它的块(block)决定的。对于块的定义,Elixir 采用了两种不同的形式:

  • 函数定义:变量在函数体内声明,仅在函数体内有效
  • do/end 块:变量在块内声明,仅在块内有效
x = "global"

def test do
  x = "local"
  IO.puts x       # "local"
end

test()
IO.puts x         # "global"

在这个例子中,x 有两个不同的定义。全局变量 x 被赋值为字符串 "global"。函数 test() 中的 x 被赋值为字符串 "local"。在函数内,变量 x 的值为 "local"。但是,在函数外,全局变量 x 的值仍然为 "global"。

x = "global"

if true do
  x = "local"
  IO.puts x       # "local"
end

IO.puts x         # "local"

在这个例子中,if 块中的 x 是全局变量 x 的一个引用。当 if 块执行时,它将全局变量 x 的值改为 "local"。当 if 块结束时,变量 x 仍然存在于同一作用域中,因此它仍然引用 "local"。因此,最后一行的输出是 "local"。

参考资料