[409] Re:クラスメソッドとクラス変数
投稿者:(ぱ)
2007/02/20 02:13:25
>「プログラミング言語を作る」をいつも楽しみにしています。
ありがとうございます。
>クラスメソッドとクラス変数は、今の仕様で実現は可能ですか?
「今の(crowbarの)仕様」ということだと、そもそもクラスがないのに、
クラスメソッド、クラス変数とは何ぞや? という話になるかと思いますが、
現在、create_point()のような関数を作ることでクラスじみたことを
実現しているように、何とか似たことを実現したい、ということであれば、
「クラスもまたオブジェクトである」
「インスタンスは、クラスのconstructorメソッドで生成する」
ということにして、
function create_point_class() {
class = new_object();
# このへん
this.constructor = closure() {
this = new_object();
this.x = x;
this.y = y;
this.print = closure() {
print("(" + this.x + ", " + this.y + ")\n");
};
…
return this;
};
return class;
}
とか書けばできそうに思うのですが、どうでしょうか(すみません試してないです)。
「#このへん」で作ったローカル変数や、ローカル変数に代入したクロージャは、
コンストラクタの中で定義されているメソッドからだけ参照できるはずです。
>また、実現不可能な場合、追加の仕様としてはどういうのを考えていますか?
>グローバル変数で代用するのはちょっと…と思います。
私としては、クラス変数やクラスメソッドというものに、わざわざ言語仕様で
対応するだけの価値を感じていません。
crowbarにはそもそもクラスがないですが、クラスベースのOO言語を作るとしても、
クラス変数やクラスメソッドはつけず、グローバル変数のようなものにして、
名前空間を選択的に開示できるような形にすると思います。