La pauta de igualdad común/miembros de comparación de diseño es la de no poner en práctica la igualdad estructural sobre los tipos de referencia mutable, pero echa un vistazo a F # tipos de registro con campos variables:Igualdad inferencia en F registros # + con campos mutables
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!
El Map
está ordenado internamente, pero los campos de registro mutable
me permiten cambiar el orden mientras la instancia de registro ya está dentro del mapa y esto es muy malo.
Creo que F # debería inferir los modos [<NoEquality>]
y [<NoComparison>]
para los tipos de registro F # que declaran los campos mutables, ¿no?