map
F#が IDictionary<'Key, 'Value> の両方を実装しICollection<KeyValuePair<'a, 'b>>
ていて、両方がコントラクトの一部としてミューテーション (追加と削除) をサポートしていることを考えると、少し驚きました。
map
突然変異を起こそうとするときを除いて、単純に実装を見ると!
let map = [| (1, "one"); (2, "two") |] |> Map.ofArray
let dict = map :> IDictionary<int, string>
dict.Add(3, "three");;
上記のコードは例外をスローします。
System.NotSupportedException: マップ値は変更できません。Microsoft.FSharp.Collections.FSharpMap で
2.System-Collections-Generic-IDictionary
2-Add(TKey k, TValue v) で .$FSI_0007.main@() エラーのため停止しました
これは予想どおりです。
そのコレクションの消費者が突然変異を引き起こそうとしたときに例外をスローするためだけに、不変コレクションがそれ自体を可変コレクションとして公開できるようにすることは、非常に危険な決定のようです。
ここで何か不足していますか?