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