【问题标题】:We can change immutable variable in Elixir. Can we not say rebind equals mutable? [duplicate]我们可以更改 Elixir 中的不可变变量。我们不能说重新绑定等于可变吗? [复制]
【发布时间】:2021-06-25 10:25:22
【问题描述】:

我是函数语言的新手。我练习了一些东西,但我想知道一件事。 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

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

【问题讨论】:

  • 其实我是在发帖之前读过的,但我看不懂
  • 请确保您已阅读链接为 dup 的问题的所有 5 个答案。叫做“重绑定”,和变异无关

标签: functional-programming elixir elixir-iex


【解决方案1】:

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

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

【讨论】:

  • 谢谢,现在更清楚了。但我也想知道一件事。函数是数理逻辑。我们可以用数学来思考。 x = x + 3 对数学来说是不可能的(例如 2 = 2 + 3)。但是我们可以用长生不老药做到这一点。这是什么原因?
  • rebind 变量也不变异吗?当我们 rebinf 变量时,它具有新值。这意味着可变。我错了吗?
  • 这里是语言的创造者 José Valim 对 why 的回答:blog.plataformatec.com.br/2016/01/…
  • @YusufYalcin 我添加了一小段来回应您的回复
  • @GavinBrelstaff 谢谢你的回答..这对我来说很好的解释
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-29
  • 2013-10-13
  • 1970-01-01
  • 2011-02-19
  • 1970-01-01
相关资源
最近更新 更多