Ich habe bereits über Probleme mit Objekten gelesen, die von Companion-Klassen erben.Scala-Klasse Singleton mit nicht-Standard-Konstruktor Parameter
Zum Beispiel:
- Class constructor parameter with default value causes companion object initializer to fail
- super constructor cannot be passed a self reference unless parameter is declared by-name
Aber ich habe ein bisschen anders Problem (ich bin nicht sicher, dass es ein Fehler ist)
ich folgendes haben Code:
class Scala(name: String)
import Scala._
object Scala extends Scala(TEST_NAME){
val TEST_NAME = "test name"
}
Beachten Sie, dass ich Variable im Bereich des Companion-Objekts definiert und dann an den Konstruktor von Super übergeben.
Ich erhalte die folgenden Kompilierungsfehler:
Scala.scala:5: error: super constructor cannot be passed a self reference
unless parameter is declared by-name
object Scala extends Scala(TEST_NAME){
^
one error found
Weitere Varianten, die ich versucht habe:
Call by name:
class Scala(name: => String)
import Scala._
object Scala extends Scala(TEST_NAME){
val TEST_NAME = "test name"
}
Named Argument:
class Scala(name: String)
import Scala._
object Scala extends Scala(name = TEST_NAME){
val TEST_NAME = "test name"
}
Beide o f sie:
class Scala(name: => String)
import Scala._
object Scala extends Scala(name = TEST_NAME){
val TEST_NAME = "test name"
}
Einige Umwelt-Details:
- java:
java version "1.8.0_144"
- javac:
javac 1.8.0_144
- scala:
Scala code runner version 2.12.3
- scalac:
Scala compiler version 2.12.3
- OS:
Darwin ***.local 17.0.0 Darwin Kernel Version 17.0.0: Thu Aug 24 21:48:19 PDT 2017; root:xnu-4570.1.46~2/RELEASE_X86_64 x86_64
Update:
Für alle, die in der Auflösung dieser interessiert ist:
Ich glaube nicht, dass die Gesellschaft hier irgendeine Rolle spielt –
@EduardoParejaTobes Sie meinen, dass es keine Notwendigkeit in der Gesellschaft gibt, ja? –
yup, das ist ähnlich wie https://stackoverflow.com/q/32203867/614394 aber für Werte. Ich denke, es ist in Ordnung für Typen und falsch für Werte :) –