2016-08-12 3 views
0

Es folgt eine einfache scala Klassendefinition, innerhalb der Personenklasse sind 2 Konstruktoren definiert.Konstruktor verwenden Nullwert als Parameter

Person.scala:

// class that has field and method, 
class Person(var name:String, var age:Short) { 
    def this() { 
     this("", 0); 
    } 
    def this(name:String) { 
     this(name, 0); 
    } 
    def hi() = printf("hi, I am %s!\n", name) 
} 

// var nobody = new Person(); 
var eric = new Person("Eric", 12); 
eric.hi; 

Die Frage ist:

  • Wenn age Feld nicht in Konstruktor der Argumentliste vorgesehen ist, ich es auf null initialisiert werden soll, nicht 0 Was ist der richtige Weg dafür? Gleiche Anforderung für das Feld name.
+1

Dont null zurückgibt verwenden dann, Verwendung Option: '' 'Fall class Person (Name: Option [ String] = None, Alter: Option [Int] = None) '' 'und dann brauchst du nicht all diese Boiler-Plate-Konstruktoren – maress

+0

Erstens, wie @mares gesagt hat, ist es keine gute Möglichkeit, null zu verwenden. Zweitens können Sie 'Null' nicht dem Wert' Short' ('AnyVal') zuweisen. –

Antwort

1

Also im Grunde die scala Klasse, die Sie erstellen wollte, ist

case class Person(name:String, age:Option[Short] = None) { 
    def hi() = println(s"hi, I am $name.\nMy age is ${age.getOrElse("not provided")}.") 
} 

Welche

scala> var eric = new Person("Eric", Some(12)); 
eric: Person = Person(Eric,Some(12)) 

scala> eric.hi 
hi, I am Eric. 
My age is 12. 

scala> var eric = new Person("Eric"); 
eric: Person = Person(Eric,None) 

scala> eric.hi 
hi, I am Eric. 
My age is not provided. 
+0

Ich habe einen Zweifel, 'das (Name, None);' in diesem Ausdruck, was bedeutet der 'None'? Ist es ein irgendwo definierter Wert oder hat er ein Objekt vom Typ 'None' erstellt? –

+0

Hier ist eine [link] (http://stackoverflow.com/documentation/scala/2293/options#t=20160812155505693873) aus der Dokumentation zu erklären, was "Optionen" sind. – Esardes

Verwandte Themen