在scala中添加回调作为参数?

时间:2018-04-12 21:00:28

标签: scala

我在scala中有以下功能:

 def addAllCosts(costs: List[Int],discount: Int => Int): Int = {
var sum = 0
costs.foreach(sum += _)
discount(sum)
}

我在http akka路由器中调用这样的函数:

HttpResponse(200, entity= repository.addAllCosts(costs,repository.applyDiscount(23)))

applyDiscount看起来像这样:

def applyDiscount(sum:Int): Int = {
    return sum - discount
  }

但是,我收到以下错误:

Error:(45, 94) type mismatch;
 found   : Int
 required: Int => Int

不确定如何解决这个问题?谢谢!

1 个答案:

答案 0 :(得分:1)

applyDiscount是一个Int => Int函数,但是,您将repository.applyDiscount(23)作为discount参数的值传递,并且该表达式的类型为{{ 1}}(因为它是函数应用于值Int)的结果,而不是预期的类型23

不确定值23的来源,但至少应该编译你只需要传递对方法的引用而不应用它:

Int => Int