假设我想要创建一个类似下面这样的小包装器:
def wrapper(f: (Any) => Any): Any = {
println("Executing now")
val res = f
println("Execution finished")
res
}
wrapper {
println("2")
}
这有意义吗?我的包装方法显然是错误的,但我认为我想要做的事情的精神是可能的。我这样想是对的吗?如果是,解决方案是什么?谢谢!
wrapper
方法在内部执行包装的方法,那么应该将参数更改为“按名称”。 这使用语法=> ResultType
。def wrapper(f: => Any): Any = {
println("Executing now")
val res = f
println("Execution finished")
res
}
现在你可以这样做:
wrapper {
println("2")
}
然后它会打印出来
Executing now
2
Execution finished
如果你想使用包装函数的返回类型,你可以使你的方法成为泛型方法:
def wrapper[T](f: => T): T = {
println("Executing now")
val res: T = f
println("Execution finished")
res
}
println
并将结果传递给您的包装器,而它期望一个具有一个参数(Any
)并返回Any
的函数。def wrapper[T](f: () => T) = {
println("Executing now")
val res = f() // call the function
println("Execution finished")
res
}
wrapper {
()=>println("2") // create an anonymous function that will be called
}