Ich bin auf Übung 5.7 von „Scala für Ungeduldige“, wo ich brauche eine Klasse Person zu erstellen, die einen Namen gab: String auf Konstruktor und hat zwei Eigenschaften vorName und lastName gefüllt von Name geteilt durch whitespace. Mein erster Versuch war:Constructor-lokale Variablen in Scala
class Person(name:String) {
private val nameParts = name.split(" ")
val firstName = nameParts(0)
val lastName = nameParts(1)
}
Das Problem ist, dass jetzt nameParts bleibt als privates Feld immer sichtbar innerhalb der Klasse, wenn in der Tat nur in dem Konstruktor des lokalen Umgebung existieren sollte. Der Java-Äquivalent, was ich will wäre:
class Person{
private final String firstName;
private final String lastName;
Person(String name){
final String[] nameParts = name.split(" ");
firstName = nameParts[0];
lastName = nameParts[1];
}
}
Hier nameParts existiert den Konstruktor nur withing, das ist das, was ich bin mit dem Ziel. Irgendwelche Hinweise, wie das in Scala gemacht werden kann?
HINWEIS: Ich landete einen „Scalesque“ Weg zu finden:
class Person(name:String) {
val firstName::lastName::_ = name.split(" ").toList
}
aber ich würde immer noch gerne eine Antwort auf meine Frage bekommen.
Beispiele zur Verwendung von temporären Variablen während Objektinstanziierung auf [täglich scala Blog] (http://daily-scala.blogspot.hu/2010/02/temporary-variables -during-object.html). –
mögliches Duplikat von [Wie definierst du ein lokales var/val im primären Konstruktor in Scala?] (Http://stackoverflow.com/questions/1118669/how-do-you-define-a-local-var-val -in-the-primary-Konstruktor-in-scala) –