2004-08-27 (Fri) [長年日記]
_ oka326さんのツッコミ
Satherで書いているかと思いきやC#だったんで意外といえば意外。でもその方がいいですね。Code inclusionなんぞいらんので、Satherを断ち切ってどんどんいい言語に仕上げて言ってください。.NETとの親和性の高さに期待してます:-)
ありがとうございます。
C#なのは、単純にその方が実装が楽だったからです(言語じゃなくてライブラリの機能的に、ですが)。
code inclusionにはいいところもあって、たとえば、SAMEがサブクラスに 展開されるのは結構うれしいですね。
とかいいつつ、単一継承 + delegationの言語的なサポートとかにしちゃうかもしれないですけど。
_ parameterized type はじめの一歩
svnのheadで 以下のコードをコンパイルできるようになった。
class VALUE_HOLDER{T} is
attr value: T;
create(value: T): SAME is
res ::= new;
res.value := value;
return res;
end;
get: T is
return value;
end;
set(value: T) is
self.value := value;
end;
end;
class MAIN is
main is
x: VALUE_HOLDER{STR} := #VALUE_HOLDER{STR}("foo");
#OUT + x.get + "\n";
x.set("bar");
#OUT + x.get + "\n";
end
end
ここからが大変そうだけど。
_ C# 2.0の匿名メソッド
C# 2.0の匿名メソッドって
addButton.Click += delegate {
listBox.Items.Add(textBox.Text);
};
みたいに書けるんだ (と今更C# 2.0 Specificationを読んで知った)。
てっきり、
addButton.Click += new EventHandler(sender, e) {
listBox.Items.Add(textBox.Text);
};
としか書けないと思いこんでいた (C# プログラミング言語の将来の機能という文書のせいだ)。
名前を指定しなくていいだけじゃなくて、使わない時はパラメタを省略してもいいらしい。*1
*1 ただし、outパラメタは省略できないし、省略する時は全部省略しないといけないようだ。
[ツッコミを入れる]