그러한 메소드 오버로딩이 모호해질 수있는 유효한 경우가있을 수 있지만, 컴파일러는 왜 컴파일 타임이나 런타임에 모호하지 않은 코드를 허용하지 않습니까?
예:
// This fails:
def foo(a: String)(b: Int = 42) = a + b
def foo(a: Int) (b: Int = 42) = a + b
// This fails, too. Even if there is no position in the argument list,
// where the types are the same.
def foo(a: Int) (b: Int = 42) = a + b
def foo(a: String)(b: String = "Foo") = a + b
// This is OK:
def foo(a: String)(b: Int) = a + b
def foo(a: Int) (b: Int = 42) = a + b
// Even this is OK.
def foo(a: Int)(b: Int) = a + b
def foo(a: Int)(b: String = "Foo") = a + b
val bar = foo(42)_ // This complains obviously ...
이러한 제한을 조금 풀 수없는 이유가 있습니까?
특히 과부하가 걸린 Java 코드를 스칼라 기본 인수로 변환하는 것은 매우 중요하며 스펙 / 컴파일러가 임의의 제한을 부과하는 하나의 스칼라 메소드로 많은 Java 메소드를 대체 한 후에는 찾기가 좋지 않습니다.
object Test { def a[A](b: Int, c: Int, d: Int = 7): Unit = {}; def a[A](a:String, b: String = ""): Unit = {}; a(2,3,4); a("a");}