2016-10-29 5 views
1

スカラでは、いくつかの "戦略"パラメータ(ここではmyBase)と値パラメータ(ここではmyVal)を受け入れる抽象クラスを作成したいと思います。 そのクラスから継承し、継承の一部として戦略パラメータを提供し、その値をコンストラクタパラメータとして受け入れるクラス(ここではCls1)を取得します。ここでスカラ - 部分的なコンストラクタパラメータを継承するクラスを作成

は、私が実行できるようにするコードです:

abstract class Base(myBase: Int)(val myVal: Int) { 
    val divVal: Int = myBase/myVal 
} 

class Cls1 extends Base(10) // myBase = 10 
val obj1 = new Cls1(5) // myVal = 5 
assert(obj1.divVal == 10/5) 

は残念ながら、私は、次のエラーを取得:

Error: too many arguments for constructor Cls1:()A$A58.this.Cls1 lazy val obj1 = new Cls1(5) Error: missing argument list for constructor Base in class Base class Cls1 extends Base(10)

私はロジックを繰り返すことなくこれを実現する方法を説明していただけます(ここではmyBase/myVal)?

答えて

3

あなたはどのinhertingクラスによって埋められていなければならない抽象フィールドであることをmyValを要求することができます。

abstract class Base(myBase: Int) { 
    val myVal: Int 
    val divVal: Int = myBase/myVal 
} 

class Clazz(val myVal: Int) extends Base(10) 

val clz = new Clazz(5) 
assert(clz.divVal == 10/5) 
関連する問題