我可以用scala.Singleton做什么?

时间:2014-08-20 15:05:19

标签: scala

澄清一下:我不是在问我可以使用Singleton设计模式。问题是scala中提供的大部分无证特征。

这个特性是什么?到目前为止,我能找到的唯一具体用例是将特征仅限于对象,如本问题所示:Restricting a trait to objects?

这个问题为Is scala.Singleton pure compiler fiction?问题提供了一些启示,但显然还有另一个用例!

是否有一些我无法想到的显而易见的用途,还是主要是编译器杂志呢?

1 个答案:

答案 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

所以你甚至无法在有意义的测试中使用这个特性。

这不是一个明确的答案,只是我的观察