Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala抽象类函数调用_Scala - Fatal编程技术网

Scala抽象类函数调用

Scala抽象类函数调用,scala,Scala,我是scala的新手,如果这个问题很愚蠢,我会提前道歉。我正在浏览这段scala代码,我不知道下面的代码是如何工作的 abstract class ClusterSimulatorDesc(val runTime: Double) { def newSimulator(constantThinkTim: Double, perTaskThinkTime: Double, blackListPercent: Double,

我是scala的新手,如果这个问题很愚蠢,我会提前道歉。我正在浏览这段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) {
现在,如果我有一个函数调用,如:-

simulatorDesc: ClusterSimulatorDesc
val simulator =
              simulatorDesc.newSimulator(constantThinkTime,
                                         perTaskThinkTime,
                                         blackListPercent,
                                         schedulerWorkloadsToSweepOver,
                                         schedulerWorkloadMap,
                                         workloadDesc.cellStateDesc,
                                         workloads,
                                         prefillWorkloads,
                                         logging)
现在我的问题是,抽象类声明末尾的“ClusterSimulator”是做什么的? 而且,考虑到“newSimulator”函数是在抽象类中声明的,它是如何调用的

def newSimulator(....): ClusterSimulator
调用方法
newSimulator()
时,返回
ClusterSimulator
的实例

simulatorDesc: ClusterSimulatorDesc
ClusterSimulatorDesc
无法实例化,因为它是抽象的,但是可以实例化扩展
ClusterSimulatorDesc
的类,并且该类的实例也是
ClusterSimulatorDesc
的实例,并且可以调用其方法

调用方法
newSimulator()
时,返回
ClusterSimulator
的实例

simulatorDesc: ClusterSimulatorDesc

ClusterSimulatorDesc
是抽象的,因此无法实例化,但是可以实例化扩展了
ClusterSimulatorDesc
的类,该类的实例也是
ClusterSimulatorDesc
的实例,并且可以调用其方法。

您可以阅读继承(OOP概念)。以下是简要信息:。更详细:您可以阅读有关继承(OOP概念)的内容。以下是简要信息:。更详细: