【发布时间】:2012-01-06 13:53:48
【问题描述】:
在 Scala 中,Set 是一个函数:
trait Set[A] extends (A => Boolean)
这使得不可能有一个协变不可变 Set 因为类型 A 出现在逆变位置。相比之下,Seq 没有定义为函数。关于为什么 Sets 和 Seqs 是这样设计的问题,已经有一些内容了:
- Why is Scala's immutable Set not covariant in its type?
- Scala: Why does Seq.contains take an Any argument, instead of an argument of the sequence type?
- Why does Seq.contains accept type Any rather than the type parameter A?
一个答案说这是因为数学背景。但是这个答案没有多解释一点。那么,将Set 定义为函数的具体优势是什么,或者如果以不同的方式实现会有什么劣势?
【问题讨论】:
-
我认为this answer 对您链接的第一个问题说的比其他问题要多。
-
顺便说一句,为什么如果我在第一个链接问题中将函数
foo称为 foo(Set("asd")),它会编译? -
我认为这是因为
SetFactory中的apply方法足够灵活,可以生成仅包含参数的不同元素类型集。