📅  最后修改于: 2023-12-03 15:14:51.711000             🧑  作者: Mango
变量是 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 采用了两种不同的形式:
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"。