Estoy en el ejercicio de 5,7 "Scala para impacientes", donde i necesidad de crear una clase Persona que lleva un nombre : String el constructor y tiene 2 propiedades primerNombre y lastName relleno del nombre dividido por espacios en blanco. Mi primera prueba fue:las variables Constructor-locales en Scala
class Person(name:String) {
private val nameParts = name.split(" ")
val firstName = nameParts(0)
val lastName = nameParts(1)
}
El problema es que ahora nameParts permanece como un campo privado siempre visible dentro de la clase, cuando en realidad sólo debe existir en el entorno local del constructor. El equivalente de Java de lo que quiero sería:
class Person{
private final String firstName;
private final String lastName;
Person(String name){
final String[] nameParts = name.split(" ");
firstName = nameParts[0];
lastName = nameParts[1];
}
}
Aquí, nameParts existe sólo en el canto del constructor, que es lo que estoy buscando. ¿Algún indicio de cómo se puede hacer esto en Scala?
NOTA: Me terminó encontrando una manera más "Scalesque":
class Person(name:String) {
val firstName::lastName::_ = name.split(" ").toList
}
pero todavía le gustaría obtener una respuesta a mi pregunta.
ejemplos sobre el uso de variables temporales durante la instanciación de objetos en el [Blog Scala diaria] (http://daily-scala.blogspot.hu/2010/02/temporary-variables -during-object.html). –
posible duplicado de [¿Cómo se define un var/val local en el constructor primario en Scala?] (Http://stackoverflow.com/questions/1118669/how-do-you-define-a-local-var-val -in-the-primary-constructor-in-scala) –