Lua クラスと継承

人によってかなり違う。微妙にC++のようなJavascriptっぽかったり。
Luaのコードを見れば書いた人の言語ベースとか業界とか性癖とか分かったりするかも(適当)

クラスはこの二種類が基本。
ていうかnewあったほうが分かりやすいので下の方を主に使ってる感じです。

TestClass2 = {}
TestClass2.A = "test class 2"
function TestClass2:print2()
  print(self.A)
end
TestClass = {}
TestClass.new = function()
  local obj = {}
  obj.A = "test class"
  function obj:print2()
    print(obj.A)
  end
  return obj
end

で、継承はmetatableというものがあるのでそれを使うか、あるいは親クラスをプロパティ(でいいのか?)で持っておくか。
metatableの__indexにクラスを登録しておくと、そのクラスにないオブジェクトを参照された時自動でその登録先に探しに行ってくれる。う~んJavascript。

TestClassDerivA.new = function()
  local obj = TestClass.new()
  obj.A = "test class deriv A"
  function obj:print2()
    print(obj.A)
  end
  return obj
end

TestClassDerivB.new = function()
  local obj = {}
  -- obj.A = "test class deriv B"
  function obj:print2()
    print('print2! ' .. obj.A)
  end
  setmetatable(obj, {__index=TestClass2})
  return obj
end
カテゴリー: Lua, 未分類 パーマリンク

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です