【问题标题】:Scala - Passing function as parameter when function is overloadedScala - 函数重载时将函数作为参数传递
【发布时间】:2017-12-13 00:28:59
【问题描述】:

我正在编写一个如下所示的函数:

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?

【问题讨论】:

    标签: scala function playframework overloading


    【解决方案1】:

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

    在这种特定情况下尝试

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-11-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-03
      相关资源
      最近更新 更多