Почему это не позволяет перегружать методы внутри методов (например, перегруженные закрытия)? - программирование

Почему это не позволяет перегружать методы внутри методов (например, перегруженные закрытия)?

Минимальный пример:

object Main extends App { 
  def f = {
    def giveMeBigDecimal(x: String) = BigDecimal(x)
    def giveMeBigDecimal(x: Double) = BigDecimal(x)
    (giveMeBigDecimal("1.0"), giveMeBigDecimal(1.0))
  }
}

Scala 2.9.2 компилятор продолжает говорить мне, что method giveMeBigDecimal is defined twice
Я знаю, как я могу обходить это, но любопытно, почему такое ограничение существует.

4b9b3361

Ответ 1

Это деталь реализации Scala, которая (к сожалению) попала в спецификацию. Scala реализует локальные методы как переменные с типом замыкания, и ему не разрешено иметь две переменные с тем же именем в одном и том же методе.