为什么加上括号?
这是scala编程书籍的引文。
该示例说明的另一个重要思想将使您了解为何在Scala中使用括号访问数组。Scala的特殊情况比Java少。数组只是类的实例,与Scala中的其他任何类一样。当对一个或多个值使用圆括号括起变量时,Scala会将代码转换为对该变量调用名为apply的方法的调用。因此,greetStrings(i)转换为greetStrings.apply(i)。因此,在Scala中访问数组的元素只是像其他任何方法调用一样。该原理不限于数组:对象对括号中某些参数的任何应用都将转换为apply方法调用。当然,仅当该类型的对象实际定义了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)