f# - 就捕获而言,可变 vs Ref 变量

标签 f# closures mutability

我对 f# 中变量的肤浅理解表明,将变量声明为“可变”和使用“ref”变量本质上都做同样的事情。它们都是解决相同潜在问题的不同方法 - 在函数式语言中有限且结构化的可变性允许,而不必求助于 IO Monad。根据我的理解,存在技术差异已被“抽象化”。

  • 如果是这种情况,为什么闭包不能捕获可变变量,但它们可以捕获 ref 实例?
  • 更一般地说,允许这种差异的两种形式之间的技术差异是什么?
  • 从语言设计的角度来看,引入两个可变性快捷方式而不仅仅是一个的目的是什么?

  • 如果这是一个多方,我很抱歉,但它们似乎都相关。

    最佳答案



    http://lorgonblog.wordpress.com/2008/11/12/on-lambdas-capture-and-mutability/

    特别是“语言设计评论”部分(我会在这里引用它,但它并不独立,您需要整个博客条目才能获得上下文)。

    关于f# - 就捕获而言,可变 vs Ref 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3970484/

    相关文章:

    c# - 控制台应用程序中的 Application.Current "null"

    parsing - 递归解析语法消耗输入并且无法解析序列

    closures - Smalltalk:上下文无法返回

    rust - 临时别名可变引用的最佳方法是什么?

    immutability - jQuery 对象是不可变的?

    f# - 使用异步工作流进行并行化的最佳实践

    php - 如何在 php 的闭包中使用 $this

    php - 生成器不能处于闭包状态

    struct - 如何使这个字段可变?

    f# - 如何使用 Option.map 和 Option.bind 重写多个空检查?