2008年 07月 08日

ゆの in Io-language

X := Object clone do (
	/ := method(
		if (self ?called, "スケッチ", "ひだまり") print
		self called := true
		self
	)

	< := method(o,
		"365" print
		o println
	)
)


X / _ / X < "来週も見てくださいね!"

このコードにおいて、 _ は評価されない ( / の引数なのだけど、/ 内では _ を評価していない) ので定義してなくてもいいところがポイントです。?called は、初回呼び出し時の called スロットがないために起こるエラーを回避します (正確な?の効果は「対象オブジェクトが指定メッセージに応答しないならば、メッセージセンドを行わない」かな? つまり ? でわっしょい!)。

文字列リテラルを使わずに call argAt(0) とかもできるはずなんですが、どうもマルチバイトだとダメみたいで諦めてます。