関数です。
fun(){}式によって生成されます。
いわゆるクロージャになっているので、関数生成時の変数環境が保存されます。意味的にこの文に含まれていますが、thisは関数生成時のものが使われます(Methodとの比較のために明示しました)。
// 次のようなシンタックスシュガーが用意されている fun func(x){ return x + x; } func2 : fun(x, y){ return x + y; } func(10).p; func2(10, 3).p;
クロージャとなっていることを示す例1。
class Foo{ returnFun(x){ return fun(){ this.print(x); } } print(x){ x.p; } } foo : Foo(); f : foo.returnFun(100); f();
このように、変数環境が保持され、thisとxを渡していないのにf()を呼び出したときに使用することができています。
クロージャとなっていることを示す例2。WikipediaのコードのXtal移植です。
fun newCounter(){ i : 0; return fun(){ i = i + 1; return i; } } c1 : newCounter(); c1().p; c1().p; c1().p;