1

以下のコードは、単純に「ケース クラス」にすれば問題なく動作します。ただし、変更可能なオブジェクトに対しては確かにそれは望ましくありませんが、通常のクラスに変更することで、最後に無名関数パラメーターを理解できなくなったようです。なぜこれを乗り越えられないのかわからないので、いくつかのバリエーションを試してみましたが、ケースクラスにする理由がわかりません。(scala 2.10.2) - ありがとう

/**
 *
 * @param target  - can be any large target number
 * @param perPiece  - at what percentage interval is todo called
 * @param todo    - passed current percentage complete
 */
class ProgressTool(target:Double, perPiece:Double) (todo: (Double)=>Unit) extends Mutable {

  private[this] var lastUpdate:Double =0.0

  def update(atPos:Double) = {
    val step = atPos - lastUpdate

    if (step/target >=perPiece) {
      lastUpdate += step
      todo(lastUpdate)

    }
  }

}


object TestProgressTool extends App {

  val x = new ProgressTool(1000,.01) { x:Double =>
    println("Hello "+ x)
  }
}

クラス ProgressTool のコンストラクタ ProgressTool の引数がありません val x = new ProgressTool(1000,.01) { x:Double => ^

4

2 に答える 2

1

なぜうまくいくのかはわかりませんが、これを試してください(最初の引数を持つコンストラクターの周りに余分な括弧があることに注意してください):

object TestProgressTool extends App {

  val x = (new ProgressTool(1000,.01)) { x:Double =>
    println("Hello "+ x)
  }
}
于 2013-10-09T23:21:55.233 に答える
0

2 番目のパラメーター リストの周りに丸括弧を使用すると、コードも修復され、それほど驚くことではないかもしれません。

object TestProgressTool extends App {
  val x = new ProgressTool(1000,.01) ({ x:Double =>
    println("Hello "+ x)
  })
}
于 2013-10-10T00:52:55.600 に答える