Ответ 1
Обратите внимание, что вы можете добиться того же результата, создав объект:
def something() {
object A {
def a(s:String) {}
def a(i: Int) {}
}
import A._
a("asd")
a(2)
}
В вашем примере вы определяете локальные функции. В моем примере я объявляю методы. Статическая перегрузка разрешена для объектов, классов и свойств.
Я не знаю, почему это не разрешено для локальных функций, но я предполагаю, что перегрузка является возможным источником ошибок и, вероятно, не очень полезна внутри блока кода (где, предположительно, вы можете использовать разные имена для этой области блока). Я предполагаю, что это разрешено в классах, потому что это разрешено в Java.