ทำไมต้องวงเล็บ?
นี่คือคำพูดจากหนังสือการเขียนโปรแกรมในสกาล่า
ความคิดที่สำคัญอีกตัวอย่างจากตัวอย่างนี้จะช่วยให้คุณเข้าใจว่าเหตุใดอาร์เรย์จึงเข้าถึงได้ด้วยวงเล็บใน Scala Scala มีกรณีพิเศษน้อยกว่า Java อาร์เรย์เป็นเพียงตัวอย่างของคลาสเช่นคลาสอื่น ๆ ใน Scala เมื่อคุณใช้วงเล็บล้อมรอบหนึ่งค่าขึ้นไปกับตัวแปร Scala จะแปลงรหัสให้เป็นการเรียกใช้เมธอดที่ชื่อว่า Apply กับตัวแปรนั้น ดังนั้น greetStrings (i) จึงถูกเปลี่ยนเป็น greetStrings.apply (i) ดังนั้นการเข้าถึงองค์ประกอบของอาร์เรย์ใน Scala จึงเป็นการเรียกใช้เมธอดเหมือน ๆ กัน หลักการนี้ไม่ได้ จำกัด อยู่ที่อาร์เรย์: แอปพลิเคชันใด ๆ ของวัตถุไปยังอาร์กิวเมนต์บางตัวในวงเล็บจะถูกแปลงเป็นการเรียกใช้เมธอด ของหลักสูตรนี้จะรวบรวมเฉพาะในกรณีที่ประเภทของวัตถุที่จริงกำหนดวิธีการใช้ ดังนั้นจึงไม่ใช่กรณีพิเศษ เป็นกฎทั่วไป
ต่อไปนี้เป็นตัวอย่างวิธีดึงองค์ประกอบบางอย่าง (องค์ประกอบแรกในกรณีนี้) โดยใช้รูปแบบการเขียนโปรแกรมใช้งาน
// 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)