繁体   English   中英

带有call-by-name参数的重载函数和带有by-value参数的函数

[英]Overloading function with call-by-name parameter and function with by-value parameter

为什么doSmth(() => s)不能编译? 为什么其余的代码输出“值”? 有没有办法调用第二个函数(使用call-by-name参数)?

object Test {
  def main (args: Array[String]){
    lazy val s: String = ""
    doSmth(s)
    doSmth("")
    doSmth(() => s)
  }

  def doSmth(p: String): Unit = {
    println("value!")
  }
  def doSmth(p: => String): Unit = {
    println("call by name!")
  }
}

以下代码按预期工作和编译:

def doSmth(p: String): Unit = {
  println("value!")
}
def doSmth(p: () => String): Unit = {
  println("call by name!")
}

lazy val s: String = ""
doSmth(s)
doSmth("")
doSmth(() => s)

请注意,如果您有两个版本的方法,一个是按名称,另一个是按值,则Scala无法知道您的意思。 相反,上面的方法的第二个版本从单元到字符串采用函数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM