Ho scritto una classe che accetta un varargs come parametro, e specificare la sua impostazione predefinita in modo che un utente può spesso un'istanza senza specificare un parametro:Perché è impossibile specificare il valore predefinito di un parametro varargs Scala?
class MyClass(values: Int* = 42) { }
Tuttavia, il compilatore ed il REPL mi danno i seguenti errori :
<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) { }
Come una soluzione, ho provato quanto segue, ma non ha funzionato neanche: (. è molto ambigua ovviamente)
class MyClass(value: Int = 42, otherValues: Int*) { }
Mi chiedo perché non sia consentito avere il valore predefinito per un parametro varargs. Qual è il ragionamento o la ragione tecnica che giace sotto? (La mia ipotesi è che specificare un varargs vuoto richiederebbe una sintassi o un idioma speciale, ma non sono sicuro se questo è un motivo sufficiente.)
Perché 'def foo (risultato: Int = 0, xs: String *) = ???' non è accettabile allora? È perfettamente fattibile per il compilatore riconoscere 'foo (0," impossible to compile ")' come una costruzione legale. –
@ om-nom-nom, non sono sicuro di seguirti.Sto rispondendo perché potremmo non voler supportare 'def foo (risultato: Int = 0, xs: String * = Seq (" some "," default ")) = ???'. – huynhjl
sì, ma il compilatore mette la stessa restrizione nel mio caso (almeno ci dà lo stesso errore di compilazione), quindi immagino ci possa essere qualche altra ragione che unifica questi due casi –