at:tutorial:basic
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revisionNext revisionBoth sides next revision | ||
at:tutorial:basic [2007/04/05 14:32] – elisag | at:tutorial:basic [2007/04/06 08:11] – adding elisag | ||
---|---|---|---|
Line 109: | Line 109: | ||
</ | </ | ||
- | Variables and functions defined locally to functions are only visible in the scope of the function where there were defined. | + | This example also illustrates how a function can be made private by means of lexical scope. |
=== Variable-Length Argument Functions === | === Variable-Length Argument Functions === | ||
Line 144: | Line 144: | ||
>>6 | >>6 | ||
</ | </ | ||
- | |||
===== Closures ===== | ===== Closures ===== | ||
- | The function name can also be used just to refer the function | + | As you have probably noticed in the previous examples, |
+ | |||
+ | The function name can be thus used to refer the function | ||
+ | < | ||
+ | >def makeCell(val){ | ||
+ | def getter() { val} ; | ||
+ | def setter(v) {val := v}; | ||
+ | [getter, setter] | ||
+ | } | ||
+ | >>< | ||
+ | >def [get, set] := makeCell(42); | ||
+ | >> | ||
+ | </ | ||
+ | |||
+ | 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 // | ||
+ | |||
+ | |||
===== Blocks ===== | ===== Blocks ===== | ||
Line 169: | Line 185: | ||
>>6 | >>6 | ||
</ | </ | ||
+ | |||
+ | This example also illustrates that blocks are also used to iterate over enumerations, | ||
+ | |||
AmbientTalk doesn’t support function assigment. However, one can assign blocks to variables. In order to call the block the name of the variable must be used. If the block defined parameters, these are required to the call as argument list. What follows is an example of such manipulation: | AmbientTalk doesn’t support function assigment. However, one can assign blocks to variables. In order to call the block the name of the variable must be used. If the block defined parameters, these are required to the call as argument list. What follows is an example of such manipulation: | ||
< | < | ||
Line 176: | Line 195: | ||
>>3 | >>3 | ||
</ | </ | ||
- | Blocks are used also to iterating over enumerations. As an example consider the equivalent definition of the //sum// function shown below: | ||
- | < | ||
- | >def sum (@args) { | ||
- | args.inject: | ||
- | } | ||
- | >>< | ||
- | > | ||
- | >>6 | ||
- | </ | ||
- | Note that inject is a method invoked to the table //args//. We elaborate on native data types and its operations in the next section. | ||
- |
at/tutorial/basic.txt · Last modified: 2020/02/09 22:05 by elisag