Ben bir Scala acemi değilim. Birkaç kitapla gezindim ve bazı çevrimiçi dersleri okudum. İlk projem sorun yaşıyor, bu yüzden kodu yanlış gidebilecek en basit şeye indirdim.Oluşturucular in varargs ile scala
Scala/constructors/varargs için google ve stack overflow'u aradım ve birkaç tur scala turunu okudum.
(hemen hemen) basit kodudur:
class Foo(val params: Int*)
case class Foo1(val p: Int) extends Foo(p)
case class Foo2(val p1: Int, val p2: Int) extends Foo(p1, p2)
object Demo extends App {
override def main(args: Array[String]) {
val f = Foo2(1, 2)
f.p1
}
}
durum erişim p1 meydana gelir ve iplik
"ana" java.lang.ClassCastException olup: scala.collection.mutable.WrappedArray $ ofInt java.lang.Integer
tutulma kullanarak hata ayıklama başvurmakiçin döküm olamaz, ben ilginç bir özellik bulundu: değişkenler bakarken
f Foo2 (id=23)
p2 2
params WrappedArray$ofInt (id=33)
array (id=81)
[0] 1
[1] 2
Peki p1'e ne oldu?
Bir acemi soruyla Canını sıkan için üzgünüm
Woot'u derler ve çalıştırır. İlk Scala hatam. Tamam teşekkürler. Etrafta bir işim var ama yardımın için minnettarım. Bu bana Fortran denklik bloklarını veya Pascal değişken kayıtlarını hatırlattı. –
Btw, 'sınıf X (val p: Int *)' çok anlamlı değil. Eğer X inşasından sonra 'p' ye erişmek istiyorsanız sadece varargs yerine bir sıra kullanın: 'class X (val p: Seq [Int])' veya 'class X (p: Int *) {def params: Seq [Int] = p}. – sschaef