我是一个斯卡拉新手。
我想了解为什么这段代码的行为不像我预期的那样
def invokeFunc( myFunc: () => String ){
println(myFunc())
}
def callInvoker(){
invokeFunc({ return "this is a string" })
}
当我调用“callInvoker”时,我什么也得不到。我期望打印“这是一个字符串”,但没有返回。为什么?
我是一个斯卡拉新手。
我想了解为什么这段代码的行为不像我预期的那样
def invokeFunc( myFunc: () => String ){
println(myFunc())
}
def callInvoker(){
invokeFunc({ return "this is a string" })
}
当我调用“callInvoker”时,我什么也得不到。我期望打印“这是一个字符串”,但没有返回。为什么?
这是因为return不会从您的匿名函数返回,而是从封闭方法返回。因此,当您执行此操作时,invokeFunc({ return "this is a string" })您实际上是从callInvoker(使用 value "this is a string",它只是按callInvokertype丢弃Unit)返回。
更正后的代码是:
def invokeFunc( myFunc: () => String ){
println(myFunc())
}
def callInvoker(){
invokeFunc{() => "this is a string" }
}
callInvoker()
现在您的匿名函数实际上返回"this is a string"(任何函数/方法都返回其最后一个表达式,除非return遇到显式,但正如我所解释的那样return适用于封闭方法,而不适用于匿名函数)。