【问题标题】:Equality inference in F# + records with mutable fieldsF# + 具有可变字段的记录中的平等推理
【发布时间】:2011-06-11 05:23:28
【问题描述】:

常见的相等/比较成员设计准则是不对可变引用类型实现结构相等,而是看看具有可变字段的 F# 记录类型:

type Value = { mutable value: int }

let mutableRecord = { value = 1 }
let xs = Map.ofList [ mutableRecord, "abc"
                      { value = 2 }, "def" ]

let abc = Map.find { value=1 } xs
mutableRecord.value <- 3
let abc = Map.find { value=3 } xs // KeyNotFoundException!

Map 是在内部排序的,但 mutable 记录字段允许我在记录实例已经在地图中时更改排序,这非常糟糕。

我认为 F# 应该为声明可变字段的 F# 记录类型推断 [&lt;NoEquality&gt;][&lt;NoComparison&gt;] 模式,不是吗?

【问题讨论】:

    标签: f# comparison equality mutable inference


    【解决方案1】:

    这不是一个不合理的立场。

    可能有一些巧妙的方法可以有效地利用此功能,尽管我没有深入考虑过它。这与将可变类型放入Dictionary 时基本相同,您将得到应得的结果。 (语言不能防止每一次误用,这就是为什么我们有设计指南和程序员判断来填补空白:))

    无论如何,现在没有改变它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-03-19
      • 2015-03-21
      • 1970-01-01
      • 2017-07-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多