2008年 07月 12日

ゆの in Lua

なんかまだないっぽい

X = setmetatable({ x = "" }, {
	__div = function (o1, o2)
		if o2 then
			X.x = X.x .. "スケッチ"
		else
			X.x = X.x .. "ひだまり"
		end
		return o1
	end,

	__lt  = function (o1, o2)
		print(X.x)
		return X
	end,

	__call = function (self, arg)
		X.x = X.x .. "×365 " .. arg
		return X
	end,
})


return
X / _ / X < X"来週も見てくださいね!"
  • 普通に演算子オーバーロード
  • return つけないと式とみなされなくて syntax error
  • print は改行が入ってしまうので最後に一度だけ
  • 連結演算子が .. であることをすっかり忘れていてハマった
  • 比較演算子はオペランドが両方とも同じ型でないとエラーになってしまうため、ラップしてる
  • X"foo" は X("foo") と同じ、でもって、関数呼びだしはメタテーブルの __call になる。
  • 宣言していない、一度も代入していない変数が普通に nil として使えてしまうので _ に定義はいらない