English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
الوظائف المطبقة بشكل جزئي في 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