Scala Default Werte bei Klassenkonstruktor

Siassei

Bekanntes Mitglied
Servus,

ich habe mal wieder was lustiges vor :). Mich würde interessieren, warum folgendes nicht compiliert.
Scala:
Java:
class Abc(
  private var x1:Double,
  private var y1:Double,

  private var x2:Double,
  private var y2:Double,
  
  private var xOrigin:Double = (x1 + x2) / 2.0
...
 
G

gman

Gast
Die Frage ist schon etwas älter, aber ich fange auch gerade erst mit Scala an :D

Zum einen sind da glaub ich einige Tippfehler, so müsste es richtig sein (bis auf
dein Problem):

Java:
class Abc{
  private var x1:Double
  private var y1:Double
 
  private var x2:Double
  private var y2:Double
  
  private var xOrigin:Double = (x1 + x2) / 2.0
}

Das private ist an der Stelle nur zulässig, wenn der Variablen sofort ein Wert zugewiesen wird,
wie es bei der letzten Variablen xOrigin der Fall ist.
Generell scheint man bei Scala wohl eher Variablen nur dann zu definieren und ein direkt einen
Wert zuweisen wenn sie auch gebraucht wird. Das Vorgehen alle Variablen erstmal an den
Anfang des Programms zu schreiben kenne ich noch aus meiner C-Programmierzeit ;)
 

Siassei

Bekanntes Mitglied
Die Frage ist schon etwas älter, aber ich fange auch gerade erst mit Scala an :D Zum einen sind da glaub ich einige Tippfehler, so müsste es richtig sein (bis auf
dein Problem):
Titel + Frage lesen und danach :D

Welche Tippfehler?

Java:
class Test(private var eineVarFromKonstruktor:Double) {
  private var x:Double
  // ...
}

new Test(1.0) {
  x = 2.0
}
 
G

gman

Gast
Ahh, jetzt sehe ich erst richtig was du vor hattest. Das sah für mich so aus als ob die ganzen
Variablen in der Klasse stehen und nicht als Liste von Konstruktor-Parametern.

Um auf deine Frage zurück zu kommen:

Ich lese wohl noch ein bißchen weiter in meinem Scala-Buch :rtfm:

Aber so weit ich Scala bis jetzt verstanden habe musst du den Wert für xOrigin
wohl in der Klasse berechnen:

Java:
class test(private var x1: Double, private var x2: Double){

  var x3 = x1 + x2
}

Hoffentlich habe ich dein Problem jetzt richtig verstanden ;)
 

Ein Keks

Bekanntes Mitglied
du könntest einen 2. Konstruktor machen:
Java:
class Abc(
  private var x1:Double,
  private var y1:Double,
  private var x2:Double,
  private var y2:Double,
  private var xOrigin:Double){
  
  def this(x1:Double, y1:Double, x2:Double, y2:Double) = {
    this(x1, y1, x2, y2, (x1 + x2) / 2.0)
  }
}
das funktioniert auf jeden fall (aber keine ahnung warum das andere nicht geht^^)
 

Neue Themen


Oben