mieki256's diary



2018/11/17() [n年前の日記]

#1 [prog] Luaでクラスの継承を書く方法を調べていたり

Luaでクラス相当の継承をするにはどのように記述すればいいのか分からなかったので勉強中。

ググってみたら、色々な書き方があるらしくて、何がなんだか。その中でも以下を参考にして、手元で動作確認。環境は 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 みたいなソレ。前述の記事内で、一旦別名で記憶しておいて使う方法が提示されていたけれど、他にも方法があるのだろうか…。

以上です。

過去ログ表示

Prev - 2018/11 - Next
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30

カテゴリで表示

検索機能は Namazu for hns で提供されています。(詳細指定/ヘルプ


注意: 現在使用の日記自動生成システムは Version 2.19.6 です。
公開されている日記自動生成システムは Version 2.19.5 です。

Powered by hns-2.19.6, HyperNikkiSystem Project