Omslutning
Från Unix.se, den fria unixresursen.
Programmeringsbegrepp
En omslutning (eng. closure) är ett dataobjekt som består av en funktion samt dess statiska omgivning. De fria variablerna i funktionen kommer när funktionen anropas anta värden från denna omgivning, även om anropet sker i en annan lexikal omgivning. Man säger att funktionen sluter om variablerna.
Ett exempel gör det hela klarare:
(defun make-adder (x) (lambda (y) (+ x y))) (defparameter plus-5 (make-adder 5)) (mapcar plus-5 '(1 2 3 4 5))) ==> (6 7 8 9 10)
make-adder är en funktion som skapar funktioner som lägger ett värde till sitt argument. Vi använder make-adder till att skapa en funktion som hela tiden lägger 5 till sitt argument, och kallar den plus-5. Sedan kan vi använda vår funktion med mapcar för att lägga 5 till varje element i en lista. Omslutningen uppstår när make-adder återvänder. Den returnerar då en funktion som sluter om x, make-adders argument.
Dynamisk omslutning
När man till vardags talar om omslutningar menar man nästan alltid lexikala omslutningar. Dynamiska omslutningar förekommer knappast i språk av idag, men har funnits i tidigare Lispdialekter. En dynamisk omslutning fungerar på liknande sätt, men sluter om dynamiska variabelbindningar istället för lexikala.
Webbläsare
Closure är också en Webbläsare som kan hittas här (http://www.stud.uni-karlsruhe.de/~unk6/closure/).