왜 괄호입니까?
다음은 scala 의 책 프로그래밍에서 인용 한 것입니다 .
이 예제에서 설명하는 또 다른 중요한 아이디어는 스칼라에서 괄호로 배열에 액세스하는 이유에 대한 통찰을 제공합니다. 스칼라는 Java보다 특별한 경우가 적습니다. 배열은 스칼라의 다른 클래스와 마찬가지로 단순히 클래스의 인스턴스입니다. 하나 이상의 값을 둘러싼 괄호를 변수에 적용하면 Scala는 해당 변수에 apply라는 메소드를 호출하여 코드를 변환합니다. 따라서 greetStrings (i)는 greetStrings.apply (i)로 변환됩니다. 따라서 스칼라에서 배열의 요소에 액세스하는 것은 다른 것과 마찬가지로 단순히 메소드 호출입니다. 이 원칙은 배열로 제한되지 않습니다. 괄호 안의 일부 인수에 객체를 적용하면 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)