クラスを継承することを「必要とする」Pythonの質問に答えました(int
Pythonの不変型)。最近Luaをやっていて、質問に答えながら思った。「これは Lua でどのように行われますか?」
では、Lua で不変型からクラスを継承できますか? はいの場合、どのように?また、整数などのクラスから継承できない場合、Python の質問に対する私の回答と同様の動作を実装する別の方法はありますか?
補足として、私はまだ Lua のメタテーブルを理解するのにかなり苦労しています。
クラスを継承することを「必要とする」Pythonの質問に答えました(int
Pythonの不変型)。最近Luaをやっていて、質問に答えながら思った。「これは Lua でどのように行われますか?」
では、Lua で不変型からクラスを継承できますか? はいの場合、どのように?また、整数などのクラスから継承できない場合、Python の質問に対する私の回答と同様の動作を実装する別の方法はありますか?
補足として、私はまだ Lua のメタテーブルを理解するのにかなり苦労しています。
まず第一に、Lua にはオブジェクト指向ポリシーがありません。PiL2 の第 15 章から:
通常、Lua はポリシーを設定しません。代わりに、Lua は、開発者のグループが最適なポリシーを実装するのに十分強力なメカニズムを提供します。
Lua でのオブジェクト指向プログラミングには多くのアプローチがあります。
Lua ではint
クラスではありません。型でさえありません (Lua はdouble
デフォルトで数値を表すために C を使用します)。
つまり、 a を使用しmetatable
て a をtable
不変にすることは可能です。したがって、table
s を使用してクラス (またはプロトタイプ) を実装している場合は、それらから確実に継承できます。クラスまたはプロトタイプに を使用することもできuserdata
、その (im) 可変性は、userdata
.
PiL 13.4.5table
のimmutable について読むことができます。Lua のメタテーブルと OOP について学ぶには、第 13 章と第 16 章を読む必要があります。
さらに例が必要な場合は、LOOPパッケージがいくつかの OOP モデルを実装しています。