Scala - 在函数重载时将函数作为参数传递

时间:2017-12-13 00:29:00

标签: scala function playframework overloading

我正在写一个看起来像这样的函数:

def func(str: String, logFunction: String => Unit) = {
  logFunction(s"message is: $str")
}

当我尝试从Play框架传递Logger.info时,我收到此错误:

type mismatch;
[error]  found   : (message: => String, error: => Throwable)Unit <and> (message: => String)Unit
[error]  required: String => Unit

似乎它找到了带有两个参数的函数,并尝试将其传递给我的函数。如何指定要传递给我的函数的单参数Logger.info?

1 个答案:

答案 0 :(得分:3)

正如您所提到的,有two overloaded Logger.info methods in Play。要将该方法转换为函数并选择所需的重载,可以显式指定类型并在函数后添加下划线。下划线将方法转换为函数,有时会自动完成,但在这种情况下可以明确地完成。另见how to get a function from an overloaded method

在这个特定情况下尝试

val logger: String => Unit = Logger.info _