2016-07-12 8 views
0

私はscalaを初めて使用しています。質問がばかだと事前に謝罪します。 「スカラ抽象クラス関数呼び出し

simulatorDesc: ClusterSimulatorDesc 
val simulator = 
       simulatorDesc.newSimulator(constantThinkTime, 
             perTaskThinkTime, 
             blackListPercent, 
             schedulerWorkloadsToSweepOver, 
             schedulerWorkloadMap, 
             workloadDesc.cellStateDesc, 
             workloads, 
             prefillWorkloads, 
             logging) 

今私が持っている質問は、何がありません - :私は、このScalaのコードをブラウズしていると私は次のように関数呼び出しを持っている場合は、次のコードは、今

abstract class ClusterSimulatorDesc(val runTime: Double) { 
    def newSimulator(constantThinkTim: Double, 
       perTaskThinkTime: Double, 
       blackListPercent: Double, 
       schedulerWorkloadsToSweepOver: Map[String, Seq[String]], 
       workloadToSchedulerMap: Map[String, Seq[String]], 
       cellStateDesc: CellStateDesc, 
       workloads: Seq[Workload], 
       prefillWorkloads: Seq[Workload], 
       logging: Boolean = false): ClusterSimulator 
} 

class ClusterSimulator(val cellState: CellState, 
        val schedulers: Map[String, Scheduler], 
        val workloadToSchedulerMap: Map[String, Seq[String]], 
        val workloads: Seq[Workload], 
        prefillWorkloads: Seq[Workload], 
        logging: Boolean = false, 
        monitorUtilization: Boolean = true, 
        monitoringPeriod: Double = 1.0) 
        extends Simulator(logging) { 

をどのように動作するか私は混乱していますClusterSimulator "は、抽象クラス宣言の最後にありますか? そして、「newSimulator」関数の呼び出しは、抽象クラスで宣言されていることを考慮して、どのように起こりますか?

+0

継承(OOPの概念)を読むことができます。ここに簡単な情報があります:http://www.scala-lang.org/old/node/125。詳細:http://www.artima.com/pins1ed/composition-and-inheritance.html –

答えて

2
def newSimulator(....): ClusterSimulator 
newSimulator()

方法は、呼び出されたとき、ClusterSimulatorのインスタンスを返します。それは抽象的であるため

simulatorDesc: ClusterSimulatorDesc 

ClusterSimulatorDesc

をインスタンス化することはできないが、 ClusterSimulatorDescを拡張するクラスをインスタンス化することができ、 のインスタンスはクラスは ClusterSimulatorDescのインスタンスであり、そのメソッドを呼び出すことができます。

関連する問題