napisałem klasę, która akceptuje varargs jako parametr i określ jego domyślne, tak że użytkownik może często instancję bez podania parametru:Dlaczego nie jest możliwe określenie domyślnej wartości parametru varaliS Scala?
class MyClass(values: Int* = 42) { }
Jednak kompilator i REPL dać mi następujące błędy :
<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) { }
Jako obejście, próbowałem następujące, ale to nie działa albo: (. to bardzo niejednoznaczne oczywiście)
class MyClass(value: Int = 42, otherValues: Int*) { }
Zastanawiam się, dlaczego nie jest dozwolone posiadanie domyślnego parametru varargs. Jakie jest rozumowanie lub powód techniczny leżący tutaj? (Domyślam się, że określenie pustych varargs wymagałoby specjalnej składni lub idiomu, ale nie jestem pewien, czy to wystarczający powód).
Dlaczego 'def foo (wynik: Int = 0, xs: String *) = ???' jest nieakceptowane? Jest całkowicie możliwe, aby kompilator rozpoznał "foo (0," niemożliwe do kompilacji ") jako prawną konstrukcję. –
@ om-nom-nom, nie jestem pewien, czy podążam za Tobą.Odpowiadam, dlaczego nie chcemy wspierać 'def foo (wynik: Int = 0, xs: String * = Seq (" some "," default ")) = ???'. – huynhjl
tak, ale kompilator umieszcza to samo ograniczenie w moim przypadku (przynajmniej daje nam ten sam błąd kompilacji), więc domyślam się, że może istnieć jakiś inny powód, który unifikuje te dwa przypadki –