1

関数の本体にあるクラスコンストラクターパラメーターにアクセスできません。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
  }
}

明示的に定義されたメンバー変数にはアクセスできますが、コンストラクター定義の変数にはアクセスできません。なんで?

4

1 に答える 1

5

デフォルトでは、コンストラクターパラメーターはプライベートです。したがって、クラス自体にのみ表示されます。しかし、あなたはこの振る舞いを変えます:

abstract class MyFunc(protected val in: Int) extends Function1[Int, Boolean] {
    val x : Int = 10
}
于 2013-03-22T12:35:41.970 に答える