Scala中Singleton单词的含义

时间:2016-07-23 04:32:51

标签: scala

我了解Singleton对象是什么,但是仔细阅读一个库我遇到了让我感到困惑的事情:混入Singleton

trait Foo[A <: Bar with Singleton] 

我似乎无法找到这意味着什么的信息。 A是Bar-with-Singleton访问的子类型? Singleton混合提供什么?

2 个答案:

答案 0 :(得分:3)

此处有一个相关问题:Is scala.Singleton pure compiler fiction?

在这里:Why do String literals conform to Scala Singleton

这可能有助于理解scala.Singleton

&#34; Singleton类型本质上是带有值的存在的编码技巧。即。

T forSome { val x: T } 

变成了

[x.type := X] T forSome { type X <:T with Singleton } 

这不是你通常会自己使用的东西。虽然您可以使用Singleton来强制执行Singleton类型作为方法的参数。 e.g。

object X
class C

def foo[T<:Singleton](singleton: T): Unit = {
  print(singleton.getClass.getName)
}

foo(X)    //This would work, outputs X$

foo(new C)    //This would not work

答案 1 :(得分:0)

Singleton是所有object继承的特殊类型。因此,这意味着A只能是SomeObject.type,其中SomeObjectobject扩展Bar。或Nothing,因为它不幸是任何事物的子类型。