я написал класс, который принимает переменное число аргументов в качестве параметра, и указать его значение по умолчанию, так что пользователь может часто его экземпляр без указания параметра:Почему невозможно указать значение по умолчанию параметра Scala varargs?
class MyClass(values: Int* = 42) { }
Однако компилятор и РЕПЛ дать мне следующие ошибки :
<console>:7: error: type mismatch;
found : Int(42)
required: Int*
class MyClass(values: Int* = 42) { }
^
<console>:7: error: a parameter section with a `*'-parameter is not allowed to have default arguments
class MyClass(values: Int* = 42) { }
в качестве обходного пути, я попытался следующие, но это не сработало: (. это очень неоднозначный, очевидно)
class MyClass(value: Int = 42, otherValues: Int*) { }
Интересно, почему для параметра varargs не указано значение по умолчанию. Какая здесь причина или техническая причина? (Мое предположение заключается в том, что для указания пустых varargs потребуется некоторый специальный синтаксис или идиома, но я не уверен, что это достаточная причина.)
Почему 'def foo (результат: Int = 0, xs: String *) = ???' неприемлемо? Для компилятора вполне возможно распознать 'foo (0,« невозможно компилировать »)' как законную конструкцию. –
@ om-nom-nom, не уверен, что я последую за тобой.Я отвечаю, почему мы не хотим поддерживать 'def foo (результат: Int = 0, xs: String * = Seq (" some "," default ")) = ???'. – huynhjl
yep, но компилятор ставит те же самые ограничения в моем случае (по крайней мере, дает нам ту же ошибку компиляции), поэтому, я думаю, может быть и другая причина, которая объединяет эти два случая –