我是斯卡拉新手。
我想理解为什么这段代码的行为不像我预期的那样
def invokeFunc( myFunc: () => String ){
println(myFunc())
}
def callInvoker(){
invokeFunc({ return "this is a string" })
}
当我调用“callInvoker”时,我什么都没得到。我期望打印“这是一个字符串”,但没有任何回报。为什么呢?
答案 0 :(得分:4)
这是因为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
适用于封闭方法从来没有匿名的功能)。