Dies ist, was ich tun will -Scala: eine Variable einmal ohne val Zuordnung
class A(some args) {
var v: SomeType = null
def method1(args) = {
v = something1
...
method3
}
def method2(args) = {
v = something2
...
method3
}
def method3 = {
// uses v
}
}
In diesem speziellen Fall method1 und 2 sich gegenseitig aus und einer von ihnen wird genau einmal in der Lebensdauer eines genannt Instanz von A. Außerdem wird v einmal zugewiesen. Ich würde es lieber ein val machen. Aber da ich den Kontext von method2 oder method3 benötige, um v zu initialisieren, kann ich das im Konstruktor nicht tun.
Wie kann dieses "val" Verhalten erreicht werden? Ich kann daran denken, Methode1 und Methode2 zu ändern, um Methoden anzuwenden, aber ich mag die Idee nicht. Darüber hinaus haben Methode 1 und 2 dieselbe Argumentsignatur (daher würden für die Unterscheidung der zwei Arten von Anrufen einige weitere Informationen benötigt).
Warum kann der 'v' Wert nicht als Argument an' m3' übergeben werden? Wird 'm3' von außerhalb der' Klasse' aufgerufen? Wenn ja, kann 'm3' vor entweder' m1' oder 'm2' genannt werden? (Was wie ein Designfehler klingt.) – jwvh
Klingt für mich so, als müssten Sie nur erzwingen, dass 'method1' oder' method2' nur einmal aufgerufen werden können und dass 'method3' nur danach aufgerufen werden kann. –
@jwvh m3 ist eine private Methode, sollte das in meinem Snippet erwähnt haben. – anindyaju99