Учитывая приведенный ниже кодScala: переопределение именованного параметр
class Parent {
def mth(p1: Int = 1, p2: Int = 2) = p1 + p2
}
class Child extends Parent{
override def mth(p2: Int = 10, p1: Int = 20) = super.mth(p2, p1)
}
object Main {
def main(args: String[]) = {
val parentRefToChild: Parent = new Child
println(parentRefToChild.mth(p1=1)) // 21
}
}
Выход 21
, но я думаю, что это должно быть 11
. И при проверке скомпилированного файла .class я обнаружил, что parentRefToChild.mth(p1=1)
был скомпилирован до parentRefToChild.mth(1, parentRefToChild.mth$default$2())
. Как мог компилятор Scala вести себя так.