Ich war neulich auf einer Java-Konferenz auf Scala, und der Redner bezog sich auf "Voll-Leistungs-Schließungen". Es fällt mir schwer, eine Definition zu finden, die für mich Sinn ergibt. Ich habe die Wiki-Seite auf Schließungen gelesen, aber sie hat es mir wirklich nicht beantwortet. Kann mir jemand mit einer klaren Definition helfen? Vielleicht sogar ein einfaches Beispiel.
Danke!
In der Informatik ist eine Schließung eine erstklassige Funktion mit freien Variablen sind in der lexikalischen Umgebung gebunden.
Sie brauchen nicht mehr als diesen Satz aus dem Wikipedia-Artikel. Was Java (zusätzlich zur hässlichen Syntax) fehlt, ist die Eigenschaft, freie Variablen von außerhalb des Abschlusses zu binden. Ein Beispiel:
%Vor%Hier wird sich der Java-Compiler über die Variable x beschweren.
Das gleiche in scala funktioniert gut und ist viel weniger ausführlich:
%Vor%Da ich mich wie ein Anfänger fühle (im Vergleich zu DPP und Amber), könnte ich es einem Anfänger in einer Anfängersprache erklären:
Zuerst ist anonyme Funktion (oder Code-Block / Lambda-Ausdruck) einfach eine Funktion, die keinen Namen hat. Es könnte an eine Variable wie diese gebunden sein.
%Vor%Sie sehen, die Funktion hat nicht den Namen foo, sie könnte stattdessen von der Leiste aufgerufen werden.
Zweitens ist eine Closure eine anonyme Funktion mit einer Variablen, die nicht innerhalb der Funktion definiert ist (die Variable / der Wert muss deklariert sein, bevor die Funktion definiert wird). Der Begriff "Full Powered Closure" bezieht sich möglicherweise auf diese Funktionalität.
%Vor%Wenn Sie das zum ersten Mal sehen, fragen Sie sich vielleicht, wofür es gut ist. Kurz gesagt, es hat viele Anwendungsbereiche: -)
Es ist möglich, dass der Sprecher "voll powered" verwendet hat, um das Gegenteil von "closed-like" zu meinen, was viele Sprachen haben tatsächlich .
Soweit ich weiß, bedeutet eine Vollsperrung nichts Besonderes, aber es kann bedeuten: Einfachheit der Syntax. Es gibt eine Welt des Unterschieds zwischen der Neubildung einer anonymen inneren Klasse in Java und der Verwendung von etwas wie (a = & gt; a & lt; max). Vielleicht die Fähigkeit, Schließungen für alle umgebenden Variablen zu bilden, nicht nur für die letzten.
Tags und Links scala closures definition theory