User Tools

Site Tools


at:tutorial:basic

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
Next revisionBoth sides next revision
at:tutorial:basic [2007/04/05 14:49] elisagat:tutorial:basic [2007/04/06 08:11] – adding elisag
Line 109: Line 109:
 </code> </code>
  
-Variables and functions defined locally to functions are only visible in the scope of the function where there were defined.  In the previous example, //fac// uses a local function //inner// that is only visible inside //fac// and its nested scopes, in the example //fac.inner.//+This example also illustrates how a function can be made private by means of lexical scope. Variables and functions defined locally to functions are only visible in the scope of the function where there were defined. Note that local //inner// function is only visible inside the //fac// function and its nested scopes. Thuscalling //fac.inner(2,3)// will return a lookup failure error.
    
 === Variable-Length Argument Functions === === Variable-Length Argument Functions ===
Line 144: Line 144:
 >>6 >>6
 </code> </code>
- 
  
 ===== Closures ===== ===== Closures =====
  
-The function name can also be used just to refer the function but without calling it. TODO!+As you have probably noticed in the previous examples,  the value returned by a function definition is a closure. Actually in AmbientTalk functions are implemented as named closures.  
 + 
 +The function name can be thus used to refer the function (without calling it). This will also return a closure to that function. As an example consider the //makeCell// function: 
 +<code> 
 +>def makeCell(val){ 
 +   def getter() { val} ; 
 +   def setter(v) {val := v}; 
 +  [getter, setter] 
 +
 +>><closure:makeCell> 
 +>def [get, set] := makeCell(42); 
 +>>[<closure:getter>, <closure:setter>
 +</code> 
 + 
 +This example also illustrates how a function can make public some of its local fields or functions by returning them as its return value. The get and set could be then passed as arguments to other functions such as //trustedFunction(get,set)// and  //distrustedFunction(get)// 
 + 
 + 
  
 ===== Blocks ===== ===== Blocks =====
Line 179: Line 195:
 >>3 >>3
 </code> </code>
- 
at/tutorial/basic.txt · Last modified: 2020/02/09 22:05 by elisag