asymptote: Variable initializers
6.7 Variable initializers
=========================
A variable can be assigned a value when it is declared, as in 'int x=3;'
where the variable 'x' is assigned the value '3'. As well as literal
constants such as '3', arbitary expressions can be used as initializers,
as in 'real x=2*sin(pi/2);'.
A variable is not added to the namespace until after the initializer
is evaluated, so for example, in
int x=2;
int x=5*x;
the 'x' in the initializer on the second line refers to the variable 'x'
declared on the first line. The second line, then, declares a variable
'x' shadowing the original 'x' and initializes it to the value '10'.
Variables of most types can be declared without an explicit
initializer and they will be initialized by the default initializer of
that type:
* Variables of the numeric types 'int', 'real', and 'pair' are all
initialized to zero; variables of type 'triple' are initialized to
'O=(0,0,0)'.
* 'boolean' variables are initialized to 'false'.
* 'string' variables are initialized to the empty string.
* 'transform' variables are initialized to the identity
transformation.
* 'path' and 'guide' variables are initialized to 'nullpath'.
* 'pen' variables are initialized to the default pen.
* 'frame' and 'picture' variables are initialized to empty frames and
pictures, respectively.
* 'file' variables are initialized to 'null'.
The default initializers for user-defined array, structure, and
function types are explained in their respective sections. Some types,
such as 'code', do not have default initializers. When a variable of
such a type is introduced, the user must initialize it by explicitly
giving it a value.
The default initializer for any type 'T' can be redeclared by
defining the function 'T operator init()'. For instance, 'int'
variables are usually initialized to zero, but in
int operator init() {
return 3;
}
int y;
the variable 'y' is initialized to '3'. This example was given for
illustrative purposes; redeclaring the initializers of built-in types is
not recommended. Typically, 'operator init' is used to define sensible
defaults for user-defined types.
The special type 'var' may be used to infer the type of a variable
from its initializer. If the initializer is an expression of a unique
type, then the variable will be defined with that type. For instance,
var x=5;
var y=4.3;
var reddash=red+dashed;
is equivalent to
int x=5;
real y=4.3;
pen reddash=red+dashed;
'var' may also be used with the extended 'for' loop syntax.
int[] a = {1,2,3};
for (var x : a)
write(x);