2016-08-12 5 views
0

以下は単純なscalaクラス定義です。Personクラス内に2つのコンストラクタが定義されています。コンストラクタはパラメータとしてnull値を使用します

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

いけない、そして、使用オプションnullを使用して返します

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

です: '' 'ケースクラスPerson(名称:オプションを[あなたがそれらのボイラープレートコンストラクタをすべて必要としないでください。 – maress

+0

まず、@maressが言ったように、それはnullを使用するスカラー方法ではありません。第2に、 'Short'(' AnyVal')値に 'null 'を代入することはできません。 –

答えて

1

だから、基本的にあなたが作成したいScalaのクラスは

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

私は疑問があります。この(名前、なし);この式では、「なし」とは何ですか?それはどこかで定義された値ですか、あるいは 'None'型のオブジェクトを作成しましたか? –

+0

'Options 'とは何かを説明しているドキュメントの[link](http://stackoverflow.com/documentation/scala/2293/options#t=20160812155505693873)です。 – Esardes

関連する問題