Simple Educative Class Library (日本語)

これは SECL としても知られています。 これは動作可能なクラス機構の単純実装であり、注釈は付けられていないため、従って、あなたの Lua 技能の良い腕試しになります。

現在のバージョンは常に love-misc-libs レポジトリから見つけることができます。

基本版の用例

require "class" -- ここでは上述のコードを class.lua へ保存したものと仮定します。

myclass = class:new()
myclass.value = 13
function myclass:setvalue(v)
    self.value = v
end
object = myclass:new()
object:setvalue(128)
-- myclass.value はまだ 13 であり object.value は現在 128 です。
anotherObject = object:new()
-- anotherObject.value は 128

改良版の用例

-- 注意: この用例は基本版のみ存在しない機能があるため、これらの関数について参照したいならば基本版の用例を参照してください。
-- require をこちらへ

-- テーブル/クラスの作成
cl1 = class:new()
cl2 = class:new()
cl3 = {}

-- テーブル/クラスへの代入
cl1.val1 = 12
cl2.val2 = 24
cl3.val3 = 48

-- merged クラスの新規作成
merged = cl1:new()
print(merged.val1, merged.val2, merged.val3) --> 12  nil  nil
merged:addparent(cl2)
print(merged.val1, merged.val2, merged.val3) --> 12  24  nil
-- cl3 は通常のテーブルであり、クラスではないことを思い出しましたか?
class:convert(cl3) -- 適所にてテーブルを変換してそれを返すため、従って、それを式中にて使用しても良いです。
merged:addparent(cl3) -- さらに merged:addparent(class:convert(cl3)) でも可能です。
print(merged.val1, merged.val2, merged.val3) --> 12  24  48

-- 任意のクラスの一部を変換するので、変換されたクラスの親は変換の呼び出し元のクラスです。
-- 注意: addparent は一度で複数の親に対応しているため、ここでの取り上げる事項の用例としては有用です。

完全版の用例

-- 注意: この用例では改良型のみ存在しない機能があります。
-- require をこちらへ

cl1 = class() -- 新しい意味
cl2 = class()

cl1.val1 = 12
cl2.val2 = 24

merged = cl1() + cl2 -- はい、あたかも計算を行っているかのごとく cl2 を加算することができます。
print(merged.val1, merged.val2) --> 12  24

if merged > cl1 then
    print("Merged is a derivative of cl1") -- それはどれかであり、従ってこれは表示されます。
end
if merged > cl2 then
    print("Merged is a derivative of cl2") -- それは同様であり、従って表示します。
end

merged2 = cl1() + cl2  -- 同じ親から別の派生物を作成します。
merged2.val1 = 36  -- 単体値を変更します。

if merged == merged2 then
    print("Merged2 is of the same type as merged") -- それらは同じ種類であり、新しいクラスとして見なされるため。これは値の追加または削除時、変更時のみ動作することに注意してください。

改訂版の用例

完全版と同じです。

関連

Bartbes は SECL の制作および保守担当者です。