代码之家  ›  专栏  ›  技术社区  ›  Sean Devlin

为什么F集不实现ISet<t>?

  •  8
  • Sean Devlin  · 技术社区  · 14 年前

    ISet<T> 与4.0版本的接口。在同一版本中,F#被添加为一级语言。F#提供一个不可变的 Set<'T> 班级。

    在我看来,提供的不可变集将实现 接口,但它没有。有人知道为什么吗?

    Map<'Key, 'Value> IDictionary ,这是可变的。在实现接口的类框架的其他地方也有一些例子,这些例子只是部分适用。

    设置(<T> 是新的,所以可能他们没来得及做。但这似乎有点单薄。

    设置(<T> 是通用的(v。 词典 ,这是不是)有什么关系吗?

    如对此事有任何意见,将不胜感激。

    2 回复  |  直到 14 年前
        1
  •  6
  •   Brian    14 年前

    我不这么认为 ISet . (事实上,我回顾了过去的邮件,发现其中提到了BCL的计划——从2008年开始——但就是这样。所以我想我们没有注意到。)

    System.Tuple , System.BigInteger , System.Threading.CancelationTokenSource (异步编程模型的一部分)等,以及 ISet公司 这可能是另一项需要后援的工作(不过,我不清楚是否有必要后援)。

    我会提出一个问题来看看,虽然在这个时候它可能是没有意义的。

        2
  •  6
  •   kvb    14 年前

    IDictionary<'k,'v> 接口对于一个不可变的字典仍然有意义;它实际上只是添加或删除单个元素,这些元素是行不通的。其次,有相当数量的代码已经被编写出来,它依赖于 IDictionary

    另一方面 ISet<'t> IEnumerable<'t> 界面-我认为它将是相对罕见的人依赖 设置(<'t> 不可变的基于集合的代码的实现。

    我不认为泛型和它有任何关系-注意,尽管有MSDN文档,F#maps实现了泛型 词典 接口,而不是非泛型接口。