functional-programming - 我们可以更改 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
我可以在同一个命名函数中用新值更改总变量。所以我认为它是不可变的。这是对的吗?
解决方案
重用变量名(通常称为重新绑定)只是 Elixir 中的一种便利——它相当于使用一个临时变量但具有相同的名称。对原始文件的引用total
会在函数范围内丢失Practice.boxes
。但这对你来说并不重要,因为你不再需要它——你只需要新的。
这是 Elixir 的设计者对命令式编程做出的罕见让步。实际上,诸如此类的表达式x = x + 1
可能会被误认为是模式匹配短语。
推荐阅读
- python - 将函数广播到 3D 数组 Python
- sql-server - SQL Server 2014 服务器名称为空
- c++ - 如果通过 lambda 函数对象返回对局部变量的引用会发生什么?
- python - 用字典匹配和不匹配的字符串替换 DataFrame 值
- javascript - TypeError:类方法不是函数,对绑定 this 感到困惑
- sql - 重新分配作业跨日期运行
- excel - 为什么在公式中使用工作表名称会使其在排序后失败?
- bash - 脚本输入所有条件
- javascript - 如何构建一个有承诺的数组?
- cobol - 遇到错误,不知道为什么还要学习 COBOL