2012-07-10 4 views
2

Disons que j'ai une classe:Accès à la classe à l'intérieur de la classe

class MyClass { 
    val value = new MyClass 
} 

Cela ne fonctionne pas, il fait apparaître une erreur de pile. Existe-t-il un moyen de faire fonctionner ce travail, donc la valeur est une instance de MyClass?

+3

Quel problème essayez-vous de résoudre? – paradigmatic

+5

Quelle est la valeur de valeur de valeur de valeur de valeur de valeur de valeur de valeur de valeur de valeur de valeur de valeur de valeur de valeur de valeur de valeur de valeur de valeur de valeur de valeur de valeur de valeur de valeur de valeur de valeur de valeur de valeur de valeur de valeur de valeur de valeur de valeur de valeur de valeur de valeur de valeur de valeur de valeur de valeur de valeur de valeur de valeur de valeur de la valeur de la valeur de la valeur de la valeur de la valeur de la valeur de la valeur de la valeur de la valeur de la valeur de la valeur de la v ... –

Répondre

3

Je suis sûr que vous voyez qu'une telle construction créerait récursivement un nombre infini d'objets MyClass.

Si vous voulez vraiment une telle "chaîne" d'objets MyClass, vous avez besoin d'une forme de cas de base pour limiter la récursivité.

4

La meilleure façon de rendre cela possible est un lazy val, qui n'a pas été exécuté jusqu'à ce qu'il soit accessible:

scala> class MyClass { lazy val value = new MyClass } 
defined class MyClass 

scala> new MyClass 
res0: MyClass = [email protected] 

scala> res0.value 
res1: MyClass = [email protected] 

scala> res1.value 
res2: MyClass = [email protected] 
+2

Veuillez ne pas aider les gens à écrire un tel code, dites-leur ce n'est pas possible. – Edmondo1984

+1

Mais c'est possible;). Dans ce cas, il peut ne pas être bon style, mais il existe certainement des cas d'utilisation où cela peut être utile. Je ne peux pas y penser maintenant, peut-être plus tard. – sschaef

0

J'ai ce que vous avez besoin

class MyClass { 
    val value = this 
} 

mais je me demande ce que pourrait être utile pour ...

Questions connexes