2016-03-28 10 views
0

これはどのように可能ですか?私は、新しいアレイ...まだM(0)10 の値を有し、M(1)であると、ArrayIndexOutOfBounds例外...Scala配列宣言 - apply(0)の直感的な結果

enter image description here

+0

デフォルト値(プリミティブでは '0' /' false'/'\ 0'、オブジェクトでは' null')に初期化されたサイズ10の配列を作成するには、 'Array.ofDim [Int](10) '。 –

答えて

0

Array[Int](10)を作成したものとの配列を作成していません要素、10。それを確認するhere

なお、Scalaでは、例外を意識することなく直接配列要素にアクセスするべきではありません。

scala> val array = Array(10) 
array: Array[Int] = Array(10) 

scala> array.drop(5).headOption 
res0: Option[Int] = None 

+1

* Scala(およびその他のFP言語)では、配列要素に直接アクセスしないでください。*配列要素に直接アクセスしないでください。 –

+0

さらに、5番目の要素にアクセスするには 'array.lift(4)'だけで安全です。最初の5つ目のコードアクセスは6番目に落ちます。 –

+0

はい、私の誤字は6番にアクセスしています。私は '.lift'を知りませんでした。ありがとう:) – pedrorijo91

1

val m = Array[Int](10)10が変数m結合した1つの要素を持つタイプIntの配列を意味し、たとえば5番目の要素にアクセスするために:私は何かのように好むだろう。 m(n)は、mのn番目の要素を意味します。

なぜm(1)があなたにArrayIndexOutOfBoundsを与えるのですか?mには1つの要素しかありません。

配列の奇妙なJava構文と混ざっていますか? int[] m = new int[10];初期化されていない要素配列が10個あります。

+0

いいえ、私は単にコースに従っていたので、私はそれを混ぜていませんでした。今ここでは、新しい単語が配列の前に追加されている場合は、次に、ゼロに初期化された10個の要素を持つ配列を宣言することを目的とした目的の効果が得られます。スカラは奇妙です。 – Beezer

+0

これは、 'Array(10)'だけでArrayオブジェクトの 'Array.apply'メソッドを呼び出すためです:http://www.scala-lang.org/api/current/#scala.Array$、' new Array (10) 'はArrayクラスのコンストラクタを呼び出します:http://www.scala-lang.org/api/current/#scala.Array – pedrofurla

+0

しかし、正直言って、私は' new Array'をあまり使わないようです。実際にはそれが存在するのを忘れていた。 – pedrofurla