首页 > 解决方案 > 我们可以更改 Elixir 中的不可变变量。我们不能说重新绑定等于可变吗?

问题描述

我是函数语言的新手。我练习了一些东西,但我想知道一件事。Elixir 告诉我一切都是不可变的,但我可以更改 Elixir 中的变量。有什么我不知道的吗?我的例子是

defmodule Practise do
    def boxes(total) do
        size_50 = div(total, 50)
        total = rem(total, 50)  
        {"big: #{size_50} total: #{total}"}
    end
end

我可以在同一个命名函数中用新值更改总变量。所以我认为它是不可变的。这是对的吗?

标签: functional-programmingelixirelixir-iex

解决方案


重用变量名(通常称为重新绑定)只是 Elixir 中的一种便利——它相当于使用一个临时变量但具有相同的名称。对原始文件的引用total会在函数范围内丢失Practice.boxes。但这对你来说并不重要,因为你不再需要它——你只需要新的。

这是 Elixir 的设计者对命令式编程做出的罕见让步。实际上,诸如此类的表达式x = x + 1可能会被误认为是模式匹配短语。


推荐阅读