[英]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.