ปิดสกาล่า
ปิดเป็นฟังก์ชันที่ส่งกลับค่าขึ้นอยู่กับการประกาศภายนอกในฟังก์ชั่นหรือตัวแปรมากขึ้น
การปิดโดยทั่วไปถือว่าเป็นแค่ฟังก์ชั่นอื่นภายในฟังก์ชันสามารถเข้าถึงตัวแปรท้องถิ่น
ฟังก์ชั่นที่ไม่ระบุชื่อดังต่อไปนี้:
val multiplier = (i:Int) => i * 10
ร่างกายทำงานมีฉันตัวแปรเป็นพารามิเตอร์ฟังก์ชั่น อีกชิ้นหนึ่งของรหัสดังต่อไปนี้:
val multiplier = (i:Int) => i * factor
มีสองตัวแปรในตัวคูณคือฉันและปัจจัย ที่ฉันเป็นพารามิเตอร์ที่อย่างเป็นทางการของฟังก์ชั่นการทำงานที่เรียกว่าเมื่อคูณผมได้รับค่าใหม่ อย่างไรก็ตามปัจจัยที่ไม่ได้เป็นพารามิเตอร์ที่เป็นทางการ แต่ตัวแปรอิสระพิจารณารหัสต่อไปนี้:
var factor = 3 val multiplier = (i:Int) => i * factor
ที่นี่เราแนะนำเป็นปัจจัยตัวแปรอิสระตัวแปรนี้ถูกกำหนดไว้ด้านนอกของฟังก์ชั่น
ตัวแปรฟังก์ชั่นคูณจึงกำหนดให้เป็น "ปิด" เพราะมันหมายถึงตัวแปรนอกนิยามฟังก์ชันที่นิยามของกระบวนการของฟังก์ชั่นนี้คือการจับตัวแปรอิสระที่ประกอบขึ้นเป็นฟังก์ชั่นปิด
ตัวอย่างที่สมบูรณ์
object Test { def main(args: Array[String]) { println( "muliplier(1) value = " + multiplier(1) ) println( "muliplier(2) value = " + multiplier(2) ) } var factor = 3 val multiplier = (i:Int) => i * factor }
การดำเนินงานของโค้ดข้างต้นผลลัพธ์คือ:
$ scalac Test.scala $ scala Test muliplier(1) value = 3 muliplier(2) value = 6