Вы можете сделать что-то вроде того, что вы можете сделать в Java, например:

могут быть допустимые случаи, когда такие перегрузки методов могут стать неоднозначными, почему компилятор запрещает код, который не является неоднозначным ни во время компиляции, ни во время выполнения?

Пример:

// 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-кода в Scala-аргументы по умолчанию очень важно, и после замены множества Java-методов одним методом Scala не очень удобно выяснять, что spec / compiler накладывает произвольные ограничения.

Ответы на вопрос(0)

Ваш ответ на вопрос