澄清一下:我不是在问我可以使用Singleton设计模式。问题是scala中提供的大部分无证特征。
这个特性是什么?到目前为止,我能找到的唯一具体用例是将特征仅限于对象,如本问题所示:Restricting a trait to objects?
这个问题为Is scala.Singleton pure compiler fiction?问题提供了一些启示,但显然还有另一个用例!
是否有一些我无法想到的显而易见的用途,还是主要是编译器杂志呢?
答案 0 :(得分:1)
我认为马丁奥德斯基对链接问题所链接的mailing list thread的评论回答了这个问题:
Singleton类型本质上是存在的编码技巧 有价值的。即。
T forSome { val x: T }
变成了
[x.type := X] T forSome { type X <: T with Singleton }
Singleton类型通常不直接使用...
换句话说,除了指导编译器的typer阶段之外,没有任何预期的用途。 Scala语言规范在§3.2.10中有这一点,同样§3.2.1表示编译器可能使用此特征来声明类型是稳定的。
您还可以使用以下内容查看此内容(Scala 2.11):
(new {}).isInstanceOf[Singleton]
<console>:54: warning: fruitless type test: a value of type AnyRef cannot also
be a Singleton
(new {}).isInstanceOf[Singleton]
^
res27: Boolean = true
所以你甚至无法在有意义的测试中使用这个特性。
(这不是一个明确的答案,只是我的观察)