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パラメタは省略できないし、省略する時は全部省略しないといけないようだ。