2016-03-28 15 views
0

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)

enter image description here

+0

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 '. –

cevap

0

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 

+1

* Scala'da (ve diğer herhangi bir FP dilinde), dizi elemanlarına doğrudan erişmemelisiniz. * Neden doğrudan dizi elemanlarına erişemezsiniz? –

+0

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. –

+0

evet, yazım 6'ya erişiyor. ama ben farkında değildim “.lift”, teşekkürler :) – pedrorijo91

1

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.

+0

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

+0

Çü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

+0

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

İlgili konular