Let\'s say I want to make a little wrapper along the lines of:
def wrapper(f: (Any) => Any): Any = {
println(\"Executing now\")
val res = f
println(\"Ex
If you want your wrapper
method to execute the wrapped method inside itself, you should change the parameter to be 'by name'. This uses the syntax => ResultType
.
def wrapper(f: => Any): Any = {
println("Executing now")
val res = f
println("Execution finished")
res
}
You can now do this,
wrapper {
println("2")
}
and it will print
Executing now
2
Execution finished
If you want to be able to use the return type of the wrapped function, you can make your method generic:
def wrapper[T](f: => T): T = {
println("Executing now")
val res: T = f
println("Execution finished")
res
}
In your case you are already executing the function println
and then pass the result to your wrapper while it is expecting a function with one arguments (Any
) and that return Any
.
Not sure if this answer to your question but you can use a generic type parameter and accept a function with no arguments that return that type:
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
}