2016-08-12 25 views
0

以下是一個簡單的scala類定義,在Person類中定義了2個構造函數。構造函數使用空值作爲參數

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; 

的問題是

  • 當構造函數的參數列表中沒有提供age場,我要初始化爲null,不爲0 ,做到這一點的正確方法是什麼? name字段的要求相同。
+1

不要使用空然後,使用選項:'''案例類人(姓名:選項[ String] = None,age:Option [Int] = None)'''然後你不需要所有這些鍋爐板的構造函數 – maress

+0

首先,正如@maress所說的,它不是使用null的scala方法。其次,你不能將'null'賦值給'Short'('AnyVal')值。 –

回答

1

所以基本上你想創建斯卡拉類是

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

它返回

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

我有一個疑問,'this(name,None);'在這個表達式中,'None'是什麼意思?它是在某個地方定義的值,還是創建了一個「None」類型的對象? –

+0

這是來自文檔的[鏈接](http://stackoverflow.com/documentation/scala/2293/options#t=20160812155505693873),解釋了什麼是「選項」。 – Esardes

相關問題