Latest web development tutorials

ฟังก์ชั่น 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!

ฟังก์ชั่นสกาล่า ฟังก์ชั่นสกาล่า