2018/11/17(土) [n年前の日記]
#1 [prog] Luaでクラスの継承を書く方法を調べていたり
Luaでクラス相当の継承をするにはどのように記述すればいいのか分からなかったので勉強中。
ググってみたら、色々な書き方があるらしくて、何がなんだか。その中でも以下を参考にして、手元で動作確認。環境は Windows10 x64 + Lua 5.3。
_お気楽 Lua プログラミング超入門
_Luaにおけるオブジェクト指向的記述の検討 - ぱろっと・すたじお
こんな感じだろうか…。
実行すると以下のような感じに。
スーパークラスのメソッドを明示的に呼ぶ方法が分からない。Ruby でいうところの super みたいなソレ。前述の記事内で、一旦別名で記憶しておいて使う方法が提示されていたけれど、他にも方法があるのだろうか…。
ググってみたら、色々な書き方があるらしくて、何がなんだか。その中でも以下を参考にして、手元で動作確認。環境は Windows10 x64 + Lua 5.3。
_お気楽 Lua プログラミング超入門
_Luaにおけるオブジェクト指向的記述の検討 - ぱろっと・すたじお
こんな感じだろうか…。
-- スーパークラス SuperClass = {} SuperClass.new = function() local obj = {} obj.a = "SuperClass" return setmetatable(obj,{__index = SuperClass}) end SuperClass.hello = function(self) print("I am ".. self.a) end SuperClass.thx = function(self) print("THX") end -- サブクラス SubClass = {} setmetatable(SubClass, {__index = SuperClass}) SubClass.new = function() local obj = SuperClass.new() obj.superclass_hello = obj.hello obj.b = "SubClass" return setmetatable(obj, {__index = SubClass}) end SubClass.hello = function(self) self:superclass_hello() print("I am " .. self.b) end -- 確認 a = SuperClass.new() print(a) a:hello() a:thx() print() b = SubClass.new() print(b) b:hello() b:thx()
実行すると以下のような感じに。
> lua class_inheritance.lua table: 007e9d30 I am SuperClass THX table: 007e9b50 I am SuperClass I am SubClass THXサブクラスから、スーパークラスが持っているメソッドを呼び出せている。
スーパークラスのメソッドを明示的に呼ぶ方法が分からない。Ruby でいうところの super みたいなソレ。前述の記事内で、一旦別名で記憶しておいて使う方法が提示されていたけれど、他にも方法があるのだろうか…。
[ ツッコむ ]
以上です。