sono in esercizio 5,7 di "Scala per l'Impaziente", dove ho bisogno di creare una classe Persona che prende il nome di : String il costruttore e dispone di 2 proprietà firstName e lastName riempito dal nome diviso per spazi. Il mio primo processo è stato:variabili Constructor-locali a Scala
class Person(name:String) {
private val nameParts = name.split(" ")
val firstName = nameParts(0)
val lastName = nameParts(1)
}
Il problema è che ora nameParts rimane come un campo privato sempre visibile all'interno della classe, quando in realtà dovrebbe esistere solo all'interno dell'ambiente locale del costruttore. L'equivalente Java di ciò che voglio sarebbe:
class Person{
private final String firstName;
private final String lastName;
Person(String name){
final String[] nameParts = name.split(" ");
firstName = nameParts[0];
lastName = nameParts[1];
}
}
Qui, nameParts esiste solo withing il costruttore, che è quello che sto puntando. Qualche suggerimento su come questo può essere fatto in Scala?
NOTA: ho finito per trovare un modo più "Scalesque":
class Person(name:String) {
val firstName::lastName::_ = name.split(" ").toList
}
ma ho ancora vorrebbe ottenere una risposta alla mia domanda.
Esempi su come utilizzare le variabili temporanee durante istanze di oggetti sul [blog scala giornaliera] (http://daily-scala.blogspot.hu/2010/02/temporary-variables -durante-object.html). –
possibile duplicato di [Come si definisce una var/val locale nel costruttore principale in Scala?] (Http://stackoverflow.com/questions/1118669/how-do-you-define-a-local-var-val -in-the-primary-constructor-in-scala) –