Luaでオブジェクト指向
FlashAirでも使ってみるかな?と思ってFlashAirについて調べてみたら、
FlashAir Developersのバージョンについての表ところに、
Luaスクリプトという見慣れない名前を発見した。
まあ、私が知らなかっただけなんですけどね。。。。
調べてみると、処理が高速で組み込み機器によく使われてるみたい。
日本語のドキュメントもmilkpot.sakura.ne.jp.さんが翻訳してくれているみたい。 とってもありがたいですな。
で、早速、ドキュメントを読んで挑戦しました。
リファレンスを読むと、言語仕様としてはとてもシンプルで、取っ付き易いです。
また、WTOPIAさんがチュートリアルを書いてくれています。
実際にお勉強し始めると、ん???と思うな仕様もありました。 非一致の演算子が ~= になってるとか・・・テーブルに キー名を指定して値を定義するときに {"key"=val} じゃなくて {key=val} になってるとか・・・そのせいで、keyに変数を指定したい場合は{[var_key]=val} みたいな表記になるとか・・・
で、オブジェクト指向を実現する方法を知らべてみると、テーブルを使うとか・・・
でも、決まった方法はないみたいですな。
(javascriptっぽい感じで実装するみたい?)
いろいろな方法で、実現できるみたいなんだけど、メソッドをオーバーライドした時に、親のメソッドを参照するいい方法(javaのsuperみたいなの)を提案してるページを見つけられなかった・・・
なので、ちょっと考えてみた。。。
<追記> やっぱり以下の方法だと、メモリ食い過ぎちゃうので、やり直し・・・
ところで、SyntaxHighlighterに Luaってあったかな?
・・・やっぱり、ありませんでした。。。
あきらめて、そのまま貼り付けますか・・・
で、実行してみる・・・・
Luaをこの先使うかどうかはわからないなぁ。
まだ、AirFlashを買うかどうかも決めてないし・・・
でも、楽しい経験でした。。。。おしまい。
ここまでやって、ちょっと違うことに気づいちゃったので、つづきはこちら。
まあ、私が知らなかっただけなんですけどね。。。。
調べてみると、処理が高速で組み込み機器によく使われてるみたい。
日本語のドキュメントもmilkpot.sakura.ne.jp.さんが翻訳してくれているみたい。 とってもありがたいですな。
で、早速、ドキュメントを読んで挑戦しました。
リファレンスを読むと、言語仕様としてはとてもシンプルで、取っ付き易いです。
また、WTOPIAさんがチュートリアルを書いてくれています。
実際にお勉強し始めると、ん???と思うな仕様もありました。 非一致の演算子が ~= になってるとか・・・テーブルに キー名を指定して値を定義するときに {"key"=val} じゃなくて {key=val} になってるとか・・・そのせいで、keyに変数を指定したい場合は{[var_key]=val} みたいな表記になるとか・・・
で、オブジェクト指向を実現する方法を知らべてみると、テーブルを使うとか・・・
でも、決まった方法はないみたいですな。
(javascriptっぽい感じで実装するみたい?)
いろいろな方法で、実現できるみたいなんだけど、メソッドをオーバーライドした時に、親のメソッドを参照するいい方法(javaのsuperみたいなの)を提案してるページを見つけられなかった・・・
なので、ちょっと考えてみた。。。
<追記> やっぱり以下の方法だと、メモリ食い過ぎちゃうので、やり直し・・・
・・・やっぱり、ありませんでした。。。
あきらめて、そのまま貼り付けますか・・・
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を買うかどうかも決めてないし・・・
でも、楽しい経験でした。。。。おしまい。
ここまでやって、ちょっと違うことに気づいちゃったので、つづきはこちら。
コメント
コメントを投稿