[411] Re:クラスメソッドとクラス変数
投稿者:タイガー
2007/02/20 02:13:25
こんにちは。
>「今の(crowbarの)仕様」ということだと、そもそもクラスがないのに、
>クラスメソッド、クラス変数とは何ぞや? という話になるかと思いますが、
確かにその通りですね。クラス「らしきもの」ですね。
>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;
>}
>
>とか書けばできそうに思うのですが、どうでしょうか(すみません試してないです)。
>「#このへん」で作ったローカル変数や、ローカル変数に代入したクロージャは、
>コンストラクタの中で定義されているメソッドからだけ参照できるはずです。
ソースの5行目は、
this.constructor = closure() {
でなく、
class.constructor = closure() {
だと思います。
上のコードで名前空間らしきものが表現できているように思いますが、
私の考えていたのは、オブジェクトを作らないでグローバルと名前空間が違う、
でも静的な寿命を持つ変数が使えるかを考えていました。
上のコードでは、new_object()でオブジェクトを作成しないと
「#このへん」の変数を参照できないと思いますので、
結局インスタンス変数に見えるような気がします。
>私としては、クラス変数やクラスメソッドというものに、わざわざ言語仕様で
>対応するだけの価値を感じていません。
>crowbarにはそもそもクラスがないですが、クラスベースのOO言語を作るとしても、
>クラス変数やクラスメソッドはつけず、グローバル変数のようなものにして、
>名前空間を選択的に開示できるような形にすると思います。
たぶんその辺は言語の特徴になってくると思いますので、クラス変数らしきものを
どう表現するのか(あるいはしないのか)は難しいかもしれません。
ただ、Javaとかに慣れているとクラス変数はストレートで分かりやすい気がします。