gpt4 book ai didi

ocaml - OCaml 中的不可变变量

转载 作者:行者123 更新时间:2023-12-04 21:56:19 30 4
gpt4 key购买 nike

我正在学习 OCaml,我对变量的不变性有点困惑。根据我正在阅读的书,变量是不可变的。到目前为止一切顺利,但为什么我可以这样做:

let foo = 42
let foo = 4242

我错过了什么??

最佳答案

我认为最好的解释方式是举个例子。考虑这段代码(在 OCaml REPL 中执行):

# let foo = 42;;
val foo : int = 42

# let return_foo () = foo;;
val return_foo : unit -> int = <fun>

# let foo = 24;;
val foo : int = 24

# return_foo ();;
- : int = 42

上面的代码执行以下操作:
  • 绑定(bind) 42foo .
  • 创建函数 return_foo ()返回绑定(bind)到 foo 的值.
  • 绑定(bind) 24foo (它隐藏了 foo 的先前绑定(bind))。
  • 调用return_foo ()函数,返回 42 .

  • 将此与可变值的行为(使用 OCaml 中的 ref 创建)进行比较:
    # let foo = ref 42;;
    val foo : int ref = {contents = 42}

    # let return_foo () = !foo;;
    val return_foo : unit -> int = <fun>

    # foo := 24;;
    - : unit = ()

    # return_foo ();;
    - : int = 24

    哪一个:
  • 创建一个包含 42 的可变引用并将其绑定(bind)到名称 foo .
  • 创建函数 return_foo ()返回存储在绑定(bind)到 foo 的引用中的值.
  • 专卖店24在绑定(bind)到 foo 的引用中.
  • 调用return_foo ()函数,返回 24 .
  • 关于ocaml - OCaml 中的不可变变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35641464/

    30 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com