¿Por qué paréntesis?
Aquí está la cita de la programación del libro en scala .
Otra idea importante ilustrada en este ejemplo le dará una idea de por qué se accede a las matrices con paréntesis en Scala. Scala tiene menos casos especiales que Java. Las matrices son simplemente instancias de clases como cualquier otra clase en Scala. Cuando aplica paréntesis alrededor de uno o más valores a una variable, Scala transformará el código en una invocación de un método llamado aplicar en esa variable. Entonces greetStrings (i) se transforma en greetStrings.apply (i). Por lo tanto, acceder a un elemento de una matriz en Scala es simplemente una llamada a un método como cualquier otro. Este principio no se limita a las matrices: cualquier aplicación de un objeto a algunos argumentos entre paréntesis se transformará en una llamada al método de aplicación. Por supuesto, esto solo se compilará si ese tipo de objeto realmente define un método de aplicación. Entonces no es un caso especial; Es una regla general.
Aquí hay algunos ejemplos de cómo extraer cierto elemento (primer elemento en este caso) usando un estilo de programación funcional.
// 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)