scala abstract class:无法访问构造函数参数

时间:2013-03-22 12:33:38

标签: scala

我无法访问函数体中的类构造函数参数。在Scala中,构造函数参数成为具有适当的get / set定义的类成员。 但在下面的例子中,我无法引用构造函数参数'p'。有什么我做错了吗?我需要输入前缀吗?

abstract class MyFunc(in: Int) extends Function1[Int, Boolean] {
    val x : Int = 10
}

val dunc = new MyFunc(10) {
  def apply(p: Int): Boolean = {
    p % in == 0  << compilation error. 'in' value not found
    // p % x == 0  << compiles fine
  }
}

我能够访问显式定义的成员变量,但不能访问构造函数定义的变量。为什么呢?

1 个答案:

答案 0 :(得分:5)

默认情况下,构造函数参数是 private :因此它们仅在类本身中可见。但是你改变了这种行为:

abstract class MyFunc(protected val in: Int) extends Function1[Int, Boolean] {
    val x : Int = 10
}