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);