2017-08-14 4 views
0

をdoes't:それは、型推論のように見えますが、私は次のコードしている、ここで仕事

trait A { 
    def x: Option[Int] 
    def y: Option[String] 
} 

case class A1(
    override val x: Option[Int] = Some(1), 
    override val y: Option[String] = Some("abc") 
) extends A 

case class A2() extends A { 
    override val x = Some(1) 
    override val y = Some("abc") 
} 

A1の定義では、私は、xとyのオプションですタイプ、[INT]とオプションの[文字列を指定する必要があります]、

x: Option[Int]

val y: Option[String]が、私はA2

のための型を指定する必要はありませんでした私はA1のために持っている、としませA2のための理由をいくつかのいずれかの助け?

答えて

2

これは、ケースクラスのコンストラクタ内で、形質Aのオーバーライドされた値を作成するためです。 A2では、これらのクラスを他のクラスメンバーと同じようにクラス本体でオーバーライドします。あなたはあなたが何を行うことができない理由はある意味は、それだけで通常のスカラ座(および一般的なプログラミング)ですので、あなたは、あなたのコンストラクタのパラメータに型を与えるために必要とされているので、あなたがこの

case class A1(val x = Some(1), val y = Some("Asdf")) extends A 

のようなものを書くことができなかったことを覚えておいてくださいやろうとしている。

関連する問題