なぜ括弧なのか?
これはScalaでのプログラミングの本からの引用です。
この例で示されているもう1つの重要なアイデアは、Scalaで配列が括弧でアクセスされる理由を理解するのに役立ちます。ScalaはJavaよりも特殊なケースが少ない。配列は、Scalaの他のクラスと同様に、単にクラスのインスタンスです。変数に1つ以上の値を囲む括弧を適用すると、Scalaはコードをその変数に対してapplyという名前のメソッドの呼び出しに変換します。したがって、greetStrings(i)はgreetStrings.apply(i)に変換されます。したがって、Scalaで配列の要素にアクセスすることは、他のメソッド呼び出しと同じです。この原理は配列に限定されません。括弧内のいくつかの引数へのオブジェクトの適用は、applyメソッド呼び出しに変換されます。もちろん、これは、そのタイプのオブジェクトが実際に適用メソッドを定義している場合にのみコンパイルされます。したがって、これは特別なケースではありません。原則です。
関数型プログラミングスタイルを使用して特定の要素(この場合は最初の要素)をプルする方法の例をいくつか示します。
// Create a multdimension Array
scala> val a = Array.ofDim[String](2, 3)
a: Array[Array[String]] = Array(Array(null, null, null), Array(null, null, null))
scala> a(0) = Array("1","2","3")
scala> a(1) = Array("4", "5", "6")
scala> a
Array[Array[String]] = Array(Array(1, 2, 3), Array(4, 5, 6))
// 1. paratheses
scala> a.map(_(0))
Array[String] = Array(1, 4)
// 2. apply
scala> a.map(_.apply(0))
Array[String] = Array(1, 4)
// 3. function literal
scala> a.map(a => a(0))
Array[String] = Array(1, 4)
// 4. lift
scala> a.map(_.lift(0))
Array[Option[String]] = Array(Some(1), Some(4))
// 5. head or last
scala> a.map(_.head)
Array[String] = Array(1, 4)