// static variables & initialization example
// requires: chuck-1.5.4.3 or higher
//
//-----------------------------------------
// STATIC VARAIBLE INITIALIZATION SEMANTICS
//-----------------------------------------
// static variable can only be DECLARED:
// a) within a class definition
// b) outside of any class function defintion
// c) at the outer-most class scope (cannot be in nested { })
//-----------------------------------------
// COMPILE-TIME checks:
// 1) a statement containing a static variable declaration
// CANNOT access member data/functions
// 2) otherwise, a statement can access both static and member data.
// 3) a statement containing a static variable declaration
// CANNOT access local (i.e., outside of class def) vars or funcs
// even in non-public classes
//-----------------------------------------
// RUNTIME checks:
// 4) static initialization statements are run in immediate mode
// meaning no time advances; this is enforced at runtime; any
// time advances, including waiting on events, will result in
// a runtime exception
//-----------------------------------------
// a class
public class Foo
{
// int
1 => static int S_INT;
// float
2 => static float S_FLOAT;
// dur
3::second => static dur S_DUR;
// time
now + 4::second => static time S_TIME;
// vec3
@(5,6,7) => static vec3 S_VEC3;
// array
[8,9,10,11] @=> static int S_INT_ARRAY[];
// string
static string S_STRING("12");
// ugen
static SinOsc S_SINOSC(440);
}
// print static variables
<<< Foo.S_INT>>>;
<<< Foo.S_FLOAT>>>;
<<< Foo.S_DUR / second>>>;
<<< (Foo.S_TIME-now) / second>>>;
<<< Foo.S_VEC3>>>;
for( auto i : Foo.S_INT_ARRAY ) <<< i>>>;
<<< Foo.S_STRING>>>;
<<< Foo.S_SINOSC.freq()>>>;