Почему поведение Scala в случае перегрузки параметрами по имени отличается от случая с параметрами по значению?

Учитывая этот код Scala:

object test {

  def byval(a: Int) = println("Int")
  def byval(a: Long) = println("Long")

  def byname(a: => Int) = println("=> Int")
  def byname(a: => Long) = println("=> Long")

  def main(args: Array[String]) {
      byval(5)
      byname(5)
  }
}

вызов byval (5) компилируется правильно, но byname не компилируется:

ambiguous reference to overloaded definition

Почему? Я ожидал увидеть такое же поведение параметров по значению и по имени в отношении перегрузки… Как это можно исправить?

9
задан Jean-Philippe Pellet 1 December 2010 в 14:00
поделиться