English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

وظائف تطبيق Scala المطبقة بشكل جزئي

الوظائف لScala

الوظائف المطبقة بشكل جزئي في Scala هي تعبير،لا تحتاج إلى تقديم جميع المعلمات المطلوبة للوظيفة، بل يكفي تقديم جزء منها أو عدم تقديم المعلمات المطلوبة.

في المثال التالي،نقوم بطباعة معلومات السجل:

import java.util.Date
object Test {
   def main(args: Array[String]) {
      val date = new Date
      log(date, "message1")
      Thread.sleep(1000)
      log(date, "message2")
      Thread.sleep(1000)
      log(date, "message3")
   }
   def log(date: Date, message: String)  = {
     println(date + "----" + message)
   }
}

ت�行 فوق الكود، النتيجة ستكون:

$ scalac Test.scala
$ scala Test
Mon Dec 02 12:52:41 CST 2018----message1
Mon Dec 02 12:52:41 CST 2018----message2
Mon Dec 02 12:52:41 CST 2018----message3

في هذا المثال،يستقبل طريقة log() إثنين من المعلمات: تاريخ والرسالة. نحن نستدعي هذه الطريقة ثلاث مرات أثناء تنفيذ البرنامج، ويكون قيمة المعلمات تاريخ متطابقة، بينما تكون الرسالة مختلفة.

يمكننا استخدام الوظائف المسبقة التطبيقية لتحسين الطريقة المذكورة أعلاه، وتقييد第一个 معامل date، والاستخدام معامل السطر الفراغي (_) لتعويض قائمة المعاملات المفقودة، ثم إسناد قيمة هذا الدالة الجديدة إلى متغير. سيكون التعديل في المثال التالي كالتالي: }}

import java.util.Date
object Test {
   def main(args: Array[String]) {
      val date = new Date
      val logWithDateBound = log(date, _ : String)
      logWithDateBound("message1" )
      Thread.sleep(1000)
      logWithDateBound("message2" )
      Thread.sleep(1000)
      logWithDateBound("message3" )
   }
   def log(date: Date, message: String)  = {
     println(date + "----" + message)
   }
}

ت�行 فوق الكود، النتيجة ستكون:

$ scalac Test.scala
$ scala Test
Tue Dec 18 11:25:54 CST 2018----message1
Tue Dec 18 11:25:54 CST 2018----message2
Tue Dec 18 11:25:54 CST 2018----message3

الوظائف لScala