Если вы хотите, чтобы ваш 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
}