Tại sao dấu ngoặc đơn?
Dưới đây là trích dẫn từ chương trình sách trong scala .
Một ý tưởng quan trọng khác được minh họa bằng ví dụ này sẽ cho bạn cái nhìn sâu sắc về lý do tại sao các mảng được truy cập bằng dấu ngoặc đơn trong Scala. Scala có ít trường hợp đặc biệt hơn Java. Mảng đơn giản là các thể hiện của các lớp như bất kỳ lớp nào khác trong Scala. Khi bạn áp dụng dấu ngoặc đơn bao quanh một hoặc nhiều giá trị cho một biến, Scala sẽ chuyển đổi mã thành một lời gọi của một phương thức có tên áp dụng trên biến đó. Vì vậy, helloStrings (i) được chuyển đổi thành helloStrings.apply (i). Do đó, việc truy cập một phần tử của một mảng trong Scala chỉ đơn giản là một cuộc gọi phương thức như bất kỳ phần tử nào khác. Nguyên tắc này không bị giới hạn trong các mảng: bất kỳ ứng dụng nào của một đối tượng cho một số đối số trong ngoặc đơn sẽ được chuyển thành một lệnh gọi phương thức áp dụng. Tất nhiên điều này sẽ chỉ biên dịch nếu loại đối tượng đó thực sự định nghĩa một phương thức áp dụng. Vì vậy, nó không phải là một trường hợp đặc biệt; đó là một quy tắc chung.
Dưới đây là một vài ví dụ về cách kéo phần tử nhất định (elem đầu tiên trong trường hợp này) bằng cách sử dụng kiểu lập trình chức năng.
// 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)