إغلاق سكالا
الإغلاق هو دالة تقوم بإرجاع قيمة تعتمد على التصريح الخارجي في وظيفة أو أكثر من المتغيرات.
إغلاق يعتبر عموما أن مجرد وظيفة أخرى داخل وظيفة يمكن الوصول إلى المتغيرات المحلية.
هذه وظيفة غير معروفة كما يلي:
val multiplier = (i:Int) => i * 10
وظيفة الجسم لديه ط متغير، كمعلمة وظيفة. آخر قطعة من التعليمات البرمجية كما يلي:
val multiplier = (i:Int) => i * factor
هناك نوعان من المتغيرات في مضاعف: أنا وعامل. حيث كنت معلمة رسمية من وظيفة، ويتم استدعاء الدالة عند مضاعف، أعطيت لي قيمة جديدة. ومع ذلك، العامل ليس المعلمات رسمية، ولكن المتغيرات حرة، والنظر في الرموز التالية:
var factor = 3 val multiplier = (i:Int) => i * factor
نحن هنا نقدم عامل متغير مجانا، يتم تعريف هذا المتغير خارج الوظيفة.
وبالتالي المتغيرات وظيفة مضاعفة يعرف بأنه "إغلاق"، لأنه يشير إلى متغير خارج تعريف الدالة، وتعريف عملية لهذه الوظيفة هو الاستيلاء على المتغيرات حرة تشكل وظيفة مغلقة.
مثال كامل
object Test { def main(args: Array[String]) { println( "muliplier(1) value = " + multiplier(1) ) println( "muliplier(2) value = " + multiplier(2) ) } var factor = 3 val multiplier = (i:Int) => i * factor }
تنفيذ التعليمات البرمجية أعلاه، والناتج هو:
$ scalac Test.scala $ scala Test muliplier(1) value = 3 muliplier(2) value = 6