1. implicit parameter คือ parameter ใน constructor หรือ method ที่เราใส่ keyword implicit นำหน้าไว้
2. เวลาเรียกใช้ constructor หรือ method หากเราไม่ได้ส่งค่าให้กับ implicit parameter ภาษา Scala จะ ค้นหาค่า (resolve) จากโค๊ดที่มีอยู่โดยอัติโนมัติ
3. implicit parameter แตกต่างจาก implicit class โดยสิ้นเชิง implicit class คือการเพิ่ม method จาก implicit class ให้ class อื่นๆ โดยไม่จำเป็นต้อง inherit หรือสร้าง wrapper class (ดูบทความก่อนหน้านี้)
4. implicit parameter ไม่ใช่ default parameter value
ลองมาดูตัวอย่างกันครับ
object Hello {
def main(args: Array[String]) {
implicit val x: Int = 10
myPrint //this is 10
myPrint(100) //this is 100
}
def myPrint(implicit a : Int) {
println("this is " + a)
}
}
จากตัวอย่างข้างต้น เรา ประกาศ myPrint ว่าเราจะ print ค่าของ a ออกมาไม่ว่าจะมีการส่งค่าให้กับ parameter a หรือไม่ ใน main method สังเกตุว่าเราประกาศ ว่า x เป็น implicit value ดังนั้นตอนที่เราเรียก myPrint ค่าของ x จะถูกส่งให้ myPrint โดยอัตโนมัติ ส่วนตอนที่เรียก myPrint(100) ค่า 100 จะถูกส่งให้ myPrint แทน
ลองมาดูอีกตัวอย่างหนึ่ง คราวนี้เราต้องการให้ส่ง name ให้กลับ myPrintln เสมอ ส่วน a เป็น implicit
ไม่ต้องส่งมา
object Hello {
def main(args: Array[String]) {
implicit val x: Int = 10
myPrint("jack") //println "this is jack and 10
}
def myPrint(name : String)(implicit a : Int) {
println(s"this is ${name} and ${a} ")
}
}
ลองมาดูตัวอย่างสุดท้าย
ในตัวอย่างนี้เราประกาศให้ myPrint รับ implicit a : Int* หมายถึงรับ int จำนวนกี่ตัวก้อได้ ใน main method เราส่ง parameter (1,2,3) และ (1,2,3,4) ให้กับ myPrint ผลลัพธ์ออกมาดังนี้
WrappedArray(1, 2, 3)
WrappedArray(1, 2, 3, 4)
สำหรับคนที่ใช้ ภาษา c# จะเห็นว่าในกรณีนี้เหมือนกันกับ params array นั่นเอง ในครั้งต่อไปเราจะมาดูกันเรื่อง Array ใน ภาษา Scala กัน
ไม่มีความคิดเห็น:
แสดงความคิดเห็น