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

在第二个参数列表周围使用圆括号也可以修复代码,并且可能不那么令人惊讶:

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