簡體   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