English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
القفل هو وظيفة، يعتمد مخرجها على متغيرات واحدة أو أكثر تم إعلانها خارج الوظيفة.
القفل عادةً يمكن اعتباره وظيفة أخرى يمكنها الوصول إلى متغيرات محلية للوظيفة.
كما في هذا النوع الغير مرئي للوظيفة:
val multiplier = (i: Int) => i * 10
يوجد متغير i في جسم الوظيفة، وهو معامل نموذج للوظيفة. مثل الكود التالي:
val multiplier = (i: Int) => i * factor
في multiplier، هناك متغيران: i وfactor. واحد منهما i هو معامل النموذج للوظيفة، حيث يتم تخصيص قيمة جديدة له عند استدعاء وظيفة multiplier. ومع ذلك، factor ليس معامل نموذج، بل هو متغير حر، راجع الكود التالي:
var factor = 3 val multiplier = (i: Int) => i * factor
في هذا المثال، نقدم متغير حر factor، الذي يتم تعريفه خارج الوظيفة.
بهذا التعريف، يصبح المتغير الوظيفي multiplier "قفازًا"، لأنه يشارك إلى المتغيرات المحددة خارج هذه الوظيفة. عملية تعريف هذه الوظيفة هي عملية استنساخ هذه المتغيرات الحرة لإنشاء وظيفة مغلقة.
مثال كامل
object Test { def main(args: Array[String]) { println("مضاعف(1) قيمة = " + multiplier(1)) println("مضاعف(2) قيمة = " + multiplier(2)) } var factor = 3 val multiplier = (i: Int) => i * factor }
تنفيذ الكود أعلاه، النتيجة ستكون:
$ scalac Test.scala $ scala Test مضاعف(1) قيمة = 3 مضاعف(2) قيمة = 6