Подтвердить что ты не робот

Конец запятой в типе

Какая черта выглядит следующим образом:

(Int, => Double) => String

Обратите внимание на конечную запятую после Int. По-видимому, это не синтаксическая лазейка, а нечто отличное от

(Int => Double) => String

например. при использовании перегрузки:

trait Foo {
  def bar(x: (Int, => Double) => String): Unit
  def bar(x: (Int  => Double) => String): Unit
}
4b9b3361

Ответ 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