我是scala新手。
我想知道为什么这段代码的行为不像我期望的那样
def invokeFunc( myFunc: () => String ){
println(myFunc())
}
def callInvoker(){
invokeFunc({ return "this is a string" })
}
当我调用"callInvoker"时,我什么也得不到。我期望打印"这是一个字符串",但没有任何返回。为什么?
这是因为return
不是从您的匿名函数返回,而是从封闭方法返回。因此,当做invokeFunc({ return "this is a string" })
时,您有效地从callInvoker
返回(值"this is a string"
,由于callInvoker
的类型为Unit
,因此被丢弃)。
正确的代码应该是:
def invokeFunc( myFunc: () => String ){
println(myFunc())
}
def callInvoker(){
invokeFunc{() => "this is a string" }
}
callInvoker()
现在您的匿名函数实际上返回"this is a string"
(任何函数/方法都返回它的最后一个表达式,除非遇到显式的return
,但正如我所解释的,return
适用于封闭方法,而绝不适用于匿名函数)。