Ответ 1
(Int, => Double) => String
- это функция со вторым аргументом by-name (=> Double
).
Вы не можете создать Function2[Int, => Double, String]
, но вы можете создать lambda (Int, => Double) => String
, что означает то же самое:
scala> def s:(Int, => Double) => String =
| (a, b) => if (a > 0) a.toString else b.toString
s: (Int, => Double) => String
scala> s(1, {println("test"); 2.0}) //second parameter is not evaluated
res0: String = 1
scala> s(-1, {println("test"); 2.0})
test
res1: String = 2.0