- :
scala> def wrap[T1, T2, T3, R](f: (T1, T2, T3) => R) = {
| (v1: T1, v2: T2, v3: T3) =>
| println("Before f")
| val r = f(v1, v2, v3)
| println("After f")
| r
| }
wrap: [T1, T2, T3, R](f: (T1, T2, T3) => R)(T1, T2, T3) => R
scala> def foo(x: String, y: Int, z: BigInt) = (x, y, z)
foo: (x: String, y: Int, z: BigInt)(String, Int, BigInt)
scala> val wrapped = wrap(foo _)
wrapped: (String, Int, BigInt) => (String, Int, BigInt) = <function3>
scala> wrapped("foo", 42, 12345)
Before f
After f
res0: (String, Int, BigInt) = (foo,42,12345)
, , , , , : - (