2016-07-23 1 views
2

J'ai une compréhension de ce que les objets Singleton sont, mais lisant attentivement une bibliothèque que je suis tombé sur quelque chose qui me confondre: le mélange dans SingletonSignification du mot Singleton à Scala

trait Foo[A <: Bar with Singleton] 

Je ne peux pas sembler trouver des informations sur ce ça signifie. A est un sous-type de Bar-with-Singleton-access? Qu'est-ce que le mélange dans Singleton fournit?

Répondre

3

Il y a une question connexe ici: Is scala.Singleton pure compiler fiction?

Et ici: Why do String literals conform to Scala Singleton

qui pourrait aider à comprendre scala.Singleton

« Le type Singleton est essentiellement un truc de codage pour des valeurs existentiaux Ie.

T forSome { val x: T } 

est transformé en

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

Ce n'est pas quelque chose que vous utiliseriez généralement vous-même. Bien que vous puissiez utiliser Singleton pour appliquer un type de singleton comme un paramètre à une méthode. par exemple.

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 
0

Singleton est le type spécial dont tous les object héritent. Donc, cela signifie A ne peut être que SomeObject.type, où SomeObject est un object s'étendant Bar. Ou Nothing, parce que c'est malheureusement un sous-type de quoi que ce soit.