3

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

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!")
  }
}
4

1 回答 1

0

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

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 无法知道您的意思是哪一个。取而代之的是,该方法的第二个版本采用从单元到字符串的函数。

于 2015-09-01T09:12:27.120 回答