Согласно eptx
Функции не поддерживают параметры по умолчанию. Методы делают. Преобразование метода в функцию теряет значения параметров по умолчанию. (Scala 2.8.1)
Печать -Xprint:typer
фаза компиляции
object Foo {
def a(i: Int, s: String = "please autocomplete this param") = i
}
дает что-то вроде
def a(i: Int, s: String = "please autocomplete this param"): Int = i;
<synthetic> def a$default$2: String = "please autocomplete this param"
, где мы видим аргумент по умолчанию доступно как a$default$2
. Таким образом, мы могли бы сделать что-то, что мы должны определенно НЕ сделать и объединить неявное преобразование с деталями, зависящими от реализации компилятора
object Foo {
def a(i: Int, s: String = "please autocomplete this param") = i
def b = (a _).tupled.andThen(println(_))
implicit def xToTupleWithDefault(x: Int): (Int, String) = (x, a$default$2)
}
import Foo._
b(2) // expands to b(xToTupleWithDefault(2))