【发布时间】:2018-02-23 19:27:04
【问题描述】:
我正在尝试创建一个通用包装函数,该函数可以包装任何返回对象的方法。与this SO 问题中的答案非常相似。我尝试了以下方法:
def wrapper_function[T](f: => T): T = {
println("Executing now");
val ret: T = f;
println("Execution finished");
ret
}
def multiply2( x: Int ): Int = wrapper_function {
println("inside multiply2");
return x*2
}
但是,我观察到在包装函数内部的函数调用之后没有执行任何操作。具体来说,“执行完成”没有被打印出来。
scala> val x = multiply2(4)
Executing now
inside multiply2
x: Int = 8
我正在使用 scala 2.11.8
我在这里做错了吗?这令人费解,我将不胜感激。
【问题讨论】:
-
在
multiply2中,return不是从传递给wrapper_function的块返回,而是从multiply2作为一个整体返回。将return x*2替换为x*2。 -
一篇关于
return的精彩博文:tpolecat.github.io/2014/05/09/return.html
标签: scala higher-order-functions