ฟังก์ชั่น Scala currying (ดีความชอบ)
ความดีความชอบ (ดีความชอบ) หมายถึงฟังก์ชั่นเดิมรับสองพารามิเตอร์เป็นฟังก์ชั่นใหม่รับพารามิเตอร์ของกระบวนการ ฟังก์ชั่นใหม่ส่งกลับพารามิเตอร์ที่สองคือฟังก์ชั่นเดิมของพารามิเตอร์
ตัวอย่าง
ครั้งแรกที่เรากำหนดฟังก์ชัน:
def add(x:Int,y:Int)=x+y
ดังนั้นเมื่อเรานำไปใช้ก็ควรจะใช้เช่นนี้เพิ่ม (1,2)
ตอนนี้เรามองไปที่การเปลี่ยนแปลงรูปร่างฟังก์ชันนี้:
def add(x:Int)(y:Int) = x + y
ดังนั้นเมื่อเรานำไปใช้ก็ควรจะใช้เช่นนี้เพิ่ม (1) (2) ผลสุดท้ายจะเหมือนกันคือ 3 วิธีนี้ (กระบวนการ) เรียกว่า currying
กระบวนการดำเนินงาน
เพิ่ม (1) (2) เป็นจริงเป็นฟังก์ชั่นในการเปิดสายสองสามัญ (ฟังก์ชั่นที่ไม่ใช่แกงกะหรี่) สายแรกใช้ x พารามิเตอร์ค่าตอบแทนของประเภทฟังก์ชั่นและพารามิเตอร์ที่สอง Y เรียกชนิดของฟังก์ชั่นนี้ ความคุ้มค่า
ครั้งแรกเป็นหลักพัฒนาเป็นวิธีการ:
def add(x:Int)=(y:Int)=>x+y
แล้วฟังก์ชั่นนี้เป็นสิ่งที่หมายความว่า? ได้รับ x เป็นพารามิเตอร์และส่งกลับฟังก์ชั่นที่ไม่ระบุชื่อความหมายของฟังก์ชั่นที่ไม่ระบุชื่อคือ: ได้รับการโต้แย้ง Y Int, ร่างกายของฟังก์ชั่น X + Y ตอนนี้เราเรียกวิธีการนี้
val result = add(1)
ผลตอบแทนที่คุ้มค่าของผลที่ควรจะเป็นฟังก์ชั่นที่ไม่ระบุชื่อ: (Y: int) => 1 + Y
ดังนั้นเพื่อที่จะได้รับผลลัพธ์ที่เรายังคงที่จะเรียกผล
val sum = result(2)
สุดท้ายให้พิมพ์ออกผลคือ 3
ตัวอย่างที่สมบูรณ์
นี่เป็นตัวอย่างที่สมบูรณ์แบบ:
object Test { def main(args: Array[String]) { val str1:String = "Hello, " val str2:String = "Scala!" println( "str1 + str2 = " + strcat(str1)(str2) ) } def strcat(s1: String)(s2: String) = { s1 + s2 } }
การดำเนินงานของโค้ดข้างต้นผลลัพธ์คือ:
$ scalac Test.scala $ scala Test str1 + str2 = Hello, Scala!