【发布时间】: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# 记录类型推断 [<NoEquality>] 和 [<NoComparison>] 模式,不是吗?
【问题讨论】:
标签: f# comparison equality mutable inference