Bu nasıl olabilir? Ben yeni bir dizi ... Henüz m (0) 10. bir değere sahiptir VE m (1) bir ArrayIndexOutOfBounds istisna ...Scala Dizi bildirimi - uygulamak için beklenmedik sonuç (0)
cevap
Array[Int](10)
oluşturulan biriyle bir dizi oluşturur değil eleman, 10
. Bunu kontrol edin Scala'da istisnai durumlardan haberdar olmadan dizi elemanlarına doğrudan erişmemelisiniz.
scala> val array = Array(10)
array: Array[Int] = Array(10)
scala> array.drop(5).headOption
res0: Option[Int] = None
* Scala'da (ve diğer herhangi bir FP dilinde), dizi elemanlarına doğrudan erişmemelisiniz. * Neden doğrudan dizi elemanlarına erişemezsiniz? –
Ayrıca, güvende olmak için 5. elemente erişmek için sadece array.lift (4) 'ü kullanabilirsiniz. Kodunuz ilk 5 olarak 6'ya erişir. –
evet, yazım 6'ya erişiyor. ama ben farkında değildim “.lift”, teşekkürler :) – pedrorijo91
val m = Array[Int](10)
10
değişken m
bağlı bir eleman ile tip Int
bir dizi anlamına gelir, örneğin 5 eleman erişmek için bir şey gibi tercih ediyorum. m(n)
, m
'un n-th elemanı anlamına gelir.
Bu nedenle m(1)
size bir ArrayIndexOutOfBounds verir, m sadece bir öğeye sahiptir.
Diziler için tek Java sözdizimi ile karıştırıyor musunuz? int[] m = new int[10];
10, başlatılmamış bir öğe dizisidir.
Hayır Sadece bir kursa devam ediyordum ... bu yüzden karıştırmadım. Şimdi, rub, eğer Yeni sözcük Array'dan önce eklendiyse, THEN, derslerin amaçladığı istenen etkiyi elde ettim, ki bu sıfıra sıfırlanan 10 elemanlı bir Array bildirmektir. Scala tuhaftır. – Beezer
Çünkü Array (10) tek başına Array nesnesinde Array.apply işlevini çağırır: http://www.scala-lang.org/api/current/#scala.Array$ ve 'new Array kullanarak (10) 'sınıftaki kurucuyu çağırır: http://www.scala-lang.org/api/current/#scala.Array – pedrofurla
Ama dürüst olmak gerekirse, 'Yeni Array'ın birçok kullanım alanı göremiyorum. . Aslında var olduğunu bile unutmuştu. – pedrofurla
Varsayılan değer olarak başlatılan bir boyut 10 dizisi oluşturmak için ('ilkeler için' '' '' '' '' '' '' '' '' '' 'Array.ofDim [Int] (10) istediğiniz '. –