pascalabcnet/PABCNetHelp/LangGuide/FuncProgramming/capture_variables.html

35 lines
1.6 KiB
HTML

<html>
<head>
<object type="application/x-oleobject" classid="clsid:1e2a7bd0-dab9-11d0-b93a-00c04fc99f9e">
<param name="Keyword" value="Çàõâàò ïåðåìåííûõ â ëÿìáäà-âûðàæåíèè">
</object>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title></title>
<link rel="StyleSheet" href="../../default.css">
</head>
<body>
<H1>Çàõâàò ïåðåìåííûõ â ëÿìáäà-âûðàæåíèè</H1>
<p><a href="lambdas.html">Ëÿìáäà-âûðàæåíèå</a> ìîæåò èñïîëüçîâàòü ïåðåìåííûå èç
âíåøíåãî êîíòåêñòà. Òàêèå ïåðåìåííûå íàçûâàþòñÿ çàõâà÷åííûìè ëÿìáäà-âûðàæåíèåì.</p>
<p><strong>Ïðèìåð 1.</strong> Çàõâàò ïåðåìåííîé â çàïðîñå Select.</p>
<blockquote><code><strong>begin</strong><br>&nbsp; <strong>var</strong> a :=
Seq(2,3,4);<br>&nbsp; <strong>var</strong> z := 1;<br>&nbsp; <strong>var</strong>
q := a.Select(x-&gt;x+z);<br>&nbsp; q.Println;<br>&nbsp; z := 2;<br>&nbsp;
q.Println;<br><strong>end</strong>.</code></blockquote>
<p>Çäåñü ëÿìáäà-âûðàæåíèå <code>x-&gt;x+z</code> çàõâàòûâàåò âíåøíþþ ïåðåìåííóþ z.
Âàæíî çàìåòèòü, ÷òî ïðè èçìåíåíèè çíà÷åíèÿ ïåðåìåííîé z çàïðîñ <code>
a.Select(x-&gt;x+z)</code>, õðàíÿùèéñÿ â ïåðåìåííîé q, âûïîëíÿåòñÿ ñ íîâûì
çíà÷åíèåì z.</p>
<p><strong>Ïðèìåð 2.</strong> Íàêîïëåíèå ñóììû âî âíåøíåé ïåðåìåííîé.</p>
<blockquote><code><strong>begin</strong><br>&nbsp; <strong>var</strong> sum :=
0;<br>&nbsp; <strong>var</strong> AddToSum: integer -&gt; () := <strong>
procedure</strong> (x) -&gt; <strong>begin</strong> sum += x; <strong>
end</strong>;<br><br>&nbsp; AddToSum(1);<br>&nbsp; AddToSum(3);<br>&nbsp;
AddToSum(5);<br><br>&nbsp; writeln(sum); <br><strong>end</strong>.</code></blockquote>
<p>&nbsp;</p>
</body>
</html>