Luaでオブジェクト指向

FlashAirでも使ってみるかな?と思ってFlashAirについて調べてみたら、 FlashAir Developersのバージョンについての表ところに、 Luaスクリプトという見慣れない名前を発見した。

まあ、私が知らなかっただけなんですけどね。。。。
調べてみると、処理が高速で組み込み機器によく使われてるみたい。
日本語のドキュメントもmilkpot.sakura.ne.jp.さんが翻訳してくれているみたい。 とってもありがたいですな。

で、早速、ドキュメントを読んで挑戦しました。
リファレンスを読むと、言語仕様としてはとてもシンプルで、取っ付き易いです。
また、WTOPIAさんがチュートリアルを書いてくれています。

実際にお勉強し始めると、ん???と思うな仕様もありました。 非一致の演算子が ~= になってるとか・・・テーブルに キー名を指定して値を定義するときに {"key"=val} じゃなくて {key=val} になってるとか・・・そのせいで、keyに変数を指定したい場合は{[var_key]=val} みたいな表記になるとか・・・

で、オブジェクト指向を実現する方法を知らべてみると、テーブルを使うとか・・・
でも、決まった方法はないみたいですな。
(javascriptっぽい感じで実装するみたい?)

いろいろな方法で、実現できるみたいなんだけど、メソッドをオーバーライドした時に、親のメソッドを参照するいい方法(javaのsuperみたいなの)を提案してるページを見つけられなかった・・・
なので、ちょっと考えてみた。。。

<追記> やっぱり以下の方法だと、メモリ食い過ぎちゃうので、やり直し・・・


ところで、SyntaxHighlighterに Luaってあったかな?
・・・やっぱり、ありませんでした。。。

あきらめて、そのまま貼り付けますか・・・

highlight.jsに切り替えました!
-- SUPERクラス?
function Human(name, age, sex)
  local self = {} -- プロパティ・メソッドを selfのテーブルに入れるスタイルにする
  self.name = name -- プロパティへの代入
  self.age = age
  self.sex = sex

  self.disp = function(self) -- メソッドの定義
    print(self.name..(self.sex=="M" and " くん" or " ちゃん")
      .."("..self.age..") - "..self.sex)
  end

  return self -- 自分自身の内容が入ったテーブルを返す
end
-- 継承してみる
function HumanEx(name, age, sex, addr)
  local super = Human(name, age, sex) -- SUPERクラスを指定(superのテーブルに代入)
  local self = {}
  setmetatable(self, {__index=super}) -- SUPERクラスを継承
  self.addr = addr

  self.disp = function(self)
    super.disp(self) -- SUPERクラスを呼び出す
    print("ADDR : "..self.addr)
  end

  return self
end
-- 更に継承してみる
function HumanDx(name, age, sex, addr, comment)
  local super = HumanEx(name, age, sex, addr)
  local self = {}
  setmetatable(self, {__index=super})
  self.comment = comment
 
  self.disp = function(self, title)
    super.disp(self)
    print(title.." : "..self.comment)
  end

  return self
end
-- 呼び出すコード
aiue = Human("あいうえ", 44, "M") -- インスタンス作成
wawon = HumanDx("わをん", 22, "F", "銀河系第三惑星", "継承してみた")

aiue:disp() -- メソッド実行
wawon:disp("コメント") -- パラメータ付きのメソッド呼び出し

で、実行してみる・・・・
あいうえ くん(44) - M
わをん ちゃん(22) - F
ADDR : 銀河系第三惑星
コメント : 継承してみた
うん、うまくいってるっぽいな・・・

Luaをこの先使うかどうかはわからないなぁ。
 まだ、AirFlashを買うかどうかも決めてないし・・・
でも、楽しい経験でした。。。。おしまい。

ここまでやって、ちょっと違うことに気づいちゃったので、つづきはこちら

ふんどしの持ち主

コメント

このブログの人気の投稿

Pythonのソースファイルの行番号を取得したい

Raspberry Pi 3 シリアルコンソール&シリアル通信

学習リモコン「リモコソ (RIMOKOSO1)」の設定