我是一个斯卡拉新手。
我想了解为什么这段代码的行为不像我预期的那样
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"
,它只是按callInvoker
type丢弃Unit
)返回。
更正后的代码是:
def invokeFunc( myFunc: () => String ){
println(myFunc())
}
def callInvoker(){
invokeFunc{() => "this is a string" }
}
callInvoker()
现在您的匿名函数实际上返回"this is a string"
(任何函数/方法都返回其最后一个表达式,除非return
遇到显式,但正如我所解释的那样return
适用于封闭方法,而不适用于匿名函数)。