F#のmap
がIDictionary < 'Key、' Value>とICollection<KeyValuePair<'a, 'b>>
の両方を実装していることが、契約の一部として突然変異(追加と削除)をサポートしていることを考慮すると、少し驚きました。F#マップは、変更可能な操作のインターフェイスを実装するのはなぜですか?
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-追加で(TKEY K、TValue vを)。$ FSI_0007.main @()が期待通りである
をエラーに起因する を停止しました。
不変なコレクションが、そのコレクションのコンシューマが突然変異を起こそうとしたときに例外をスローするための変更可能なコレクションとして公開できるようにするには、このような危険な決定があるようです。
ここに何か不足していますか?
['dict'](http://msdn.microsoft.com/en-us/library/ee353774.aspx)関数もそのような例です。 _read only_ 'IDictionary <_,_>'を返します。 – Daniel