Perché le parentesi?
Ecco la citazione dal libro di programmazione in scala .
Un'altra idea importante illustrata da questo esempio ti darà un'idea del perché si accede alle matrici con le parentesi in Scala. Scala ha meno casi speciali di Java. Le matrici sono semplicemente istanze di classi come qualsiasi altra classe in Scala. Quando si applicano parentesi che racchiudono uno o più valori a una variabile, Scala trasformerà il codice in un richiamo di un metodo chiamato applica su quella variabile. Quindi greetStrings (i) viene trasformato in greetStrings.apply (i). Quindi accedere a un elemento di un array in Scala è semplicemente una chiamata di metodo come qualsiasi altra. Questo principio non è limitato alle matrici: qualsiasi applicazione di un oggetto ad alcuni argomenti tra parentesi verrà trasformata in una chiamata di metodo apply. Naturalmente questo verrà compilato solo se quel tipo di oggetto definisce effettivamente un metodo di applicazione. Quindi non è un caso speciale; è una regola generale.
Ecco alcuni esempi su come estrarre determinati elementi (primo elemento in questo caso) usando lo stile di programmazione funzionale.
// 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)