scala中的超类构造函数

Dzh*_*zhu 4 scala scala-2.8

Scala对超类构造函数参数的处理令我感到困惑......

使用此代码:

class ArrayElement(val contents: Array[String]) {
   ...
}

class LineElement(s: String) extends ArrayElement(Array(s)) {
  ...
}
Run Code Online (Sandbox Code Playgroud)

LineElement被声明为扩展ArrayElement,我觉得Array(s)参数in ArrayElement(Array(s))正在创建一个Array实例 - 运行时??? 这是scala的合成糖还是还有其他东西在这里?

Dir*_*irk 9

是的,Array(s)表达式在运行时进行评估.

class Foo (val x: Int)
class Bar (x: Int, y: Int) extends Foo(x + y)
Run Code Online (Sandbox Code Playgroud)

Scala允许在对超类的构造函数的调用中使用表达式(类似于Java使用它的方式super(...)).这些表达式在运行时进行评估.