Ben bir parametre olarak bir varargs kabul eden bir sınıf yazdım ve bir kullanıcı sık sık bir parametre belirtmeden örnek oluşturabilirsiniz böylece onun varsayılan belirtin:Scala varargs parametresinin varsayılan değerini neden belirtmek imkansız?
class MyClass(values: Int* = 42) { }
Ancak derleyici ve REPL bana şu hataları vermek :
çözüm olarak<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) { }
, ben yapmak istedim, ama o da işe yaramadı: (. Açıkçası çok belirsiz)
class MyClass(value: Int = 42, otherValues: Int*) { }
Neden bir varargs parametresi için varsayılan değere sahip olmak için izin verilmediğini merak ediyorum. Burada yatan akıl yürütme ya da teknik neden nedir? (Benim tahminim boş bir varargs belirtmek bazı özel sözdizimi veya deyim gerektirir, ancak bu yeterli bir neden olup olmadığından emin değilim.)
Neden foo (sonuç: Int = 0, xs: String *) = ??? 'kabul edilebilir değil mi? Derleyicinin hukuki bir yapı olarak “0”, “derlemesi imkansız”) tanıması mükemmel bir şekilde mümkündür. –
@ om-nom-nom, sizi takip ettiğimden emin değilim.Neden desteklemeyi istemediğimizi cevaplayalım foo (sonuç: Int = 0, xs: String * = Seq ("some", "default")) = ??? '. – huynhjl
evet, ancak derleyici benim durumumdaki aynı kısıtlamayı koyar (en azından aynı derleme hatasını verir), bu yüzden bu iki durumu birleştiren başka bir sebep olabilir. –