【问题标题】:What is the difference of immutable and mutable variables?不可变变量和可变变量有什么区别?
【发布时间】:2017-02-23 11:11:38
【问题描述】:

我已经阅读了互联网上几乎所有不可变/可变变量的定义,但作为初学者,我并没有完全掌握它,所以我想知道是否有人真的可以用外行的方式来解释它。

任何编程语言中的不可变变量(或对象)都是我所理解的,即当变量被赋值后无法更改该变量的值时。例如,我使用 Haskell 编程语言,我写:

let x = 5

由于 Haskell 有不可变的变量,x 永远不能有任何其他值而不是 5。所以如果我在那行代码之后写:

x = 2

我实际上并没有改变 x 的值,而是创建了一个同名的新变量,现在它将是我调用 x 时引用的变量,所以在两行代码之后,我只能用2的值。

那么什么是可变变量,哪些编程语言有它呢?这对我来说是模糊的。因为当人们说可变变量时,他们显然指的是一个变量或对象,您可以在为其分配初始值后确实可以更改该值。

这是否意味着如果您有一个可变变量,您实际上会为该变量操作 计算机内存中的位置,并且在不可变变量的情况下,您无法操作计算机内存中的那个位置或什么?

我不知道如何进一步解释我的问题,正如我所说,我知道 mutable = 可以在初始值赋值后更改变量的值,而 immutable = 不能。我明白了定义。但就“幕后”发生的事情而言,我不明白它的实际含义。我想我正在寻找关于实际可变变量的简单示例。

【问题讨论】:

    标签: immutability


    【解决方案1】:

    这与不变性无关

    let x = 5
    x = 2
    

    这是重新分配,在 Haskell 中绝对不允许


    首先让我们看一个常规的let 赋值

    Prelude> let x = 5 in x
    5
    it :: Num a => a
    

    您可以使用let 绑定x,并在嵌套的let 中重新绑定一个 x - 这有效地阴影外部x

    Prelude> let x = 5 in let x = 2 in x
    2
    it :: Num a => a
    

    记住let 基本上是一个 lambda

    Prelude> (\x -> x) 5
    5
    it :: Num a => a
    

    当然,一个 lambda 可以返回一个 lambda;说明阴影 aian

    Prelude> (\x -> (\x -> x)) 5 2
    2
    it :: Num a => a
    

    【讨论】:

      猜你喜欢
      • 2016-10-19
      • 2011-10-27
      • 1970-01-01
      • 2015-05-19
      • 2011-01-14
      • 2018-04-23
      • 1970-01-01
      • 2021-10-22
      相关资源
      最近更新 更多