.NET Framework在4.0版本中添加了ISet<T>
接口(interface)。在同一发行版中,F#被添加为一流的语言。 F#提供了一个不变的Set<'T>
类。
在我看来,提供的不可变集将实现ISet<T>
接口(interface)似乎是合乎逻辑的,但事实并非如此。有人知道为什么吗?
我的猜测是他们不想实现旨在实现可变的接口(interface),但我认为这种解释无法成立。毕竟,他们的Map<'Key, 'Value>
类实现了可变的IDictionary
。在类框架的其他地方,实现接口(interface)的示例仅部分适用。
我的另一个想法是ISet<T>
是新的,因此也许他们没有解决。但这似乎很渺茫。ISet<T>
是泛型的事实(而不是IDictionary
)与它有关系吗?
任何对此事的想法将不胜感激。
最佳答案
副手我不认为我以前知道ISet
。 (实际上,我回过头来查看旧电子邮件,发现其中提到了BCL计划-从2008年开始-就是这样。所以我认为它不在我们的关注范围内。)
也就是说,F#努力使其.NET 2.0和.NET 4.0位之间源兼容,以至于将.NET 4.0实体反向移植到FSharp.Core.dll 2.0版中。例如,2.0 FSharp.Core包含System.Tuple
,System.BigInteger
,System.Threading.CancelationTokenSource
(异步编程模型的一部分)等,而ISet
可能是回移植的另一项工作(我不清楚这是否是“必需的”)。 ',以将其移植)。
我会提出一个问题,尽管目前看来尚无定论。