Bu tür yöntem aşırı yüklemelerinin belirsiz hale gelebileceği geçerli durumlar olabilirken, derleyici neden derleme zamanında ve çalışma zamanında belirsiz olmayan koda izin vermiyor?
Misal:
// 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 ...
Bu kısıtlamaların biraz gevşetilememesinin herhangi bir nedeni var mı?
Özellikle aşırı derecede aşırı yüklenmiş Java kodunu Scala varsayılan argümanlarına dönüştürmek çok önemlidir ve birçok Java yöntemini tek bir Scala yöntemiyle değiştirdikten sonra spec / derleyicinin keyfi kısıtlamalar getirdiğini öğrenmek hoş değildir.