====== Fun ======
関数です。
fun(){}式によって生成されます。
いわゆるクロージャになっているので、関数生成時の変数環境が保存されます。意味的にこの文に含まれていますが、thisは関数生成時のものが使われます(Methodとの比較のために明示しました)。
===== Example =====
// 次のようなシンタックスシュガーが用意されている
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;