为什么 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!")
}
}
最佳答案
以下代码按预期工作和编译:
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 无法知道您指的是哪一个。而在上面,该方法的第二个版本采用从单元到字符串的函数。
关于scala - 重载具有按名称调用参数的函数和具有按值参数的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32327395/