我正在写一个看起来像这样的函数:
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?
答案 0 :(得分:3)
正如您所提到的,有two overloaded Logger.info methods in Play。要将该方法转换为函数并选择所需的重载,可以显式指定类型并在函数后添加下划线。下划线将方法转换为函数,有时会自动完成,但在这种情况下可以明确地完成。另见how to get a function from an overloaded method。
在这个特定情况下尝试
val logger: String => Unit = Logger.info _