Наследование от неизменяемых типов?

Я только что ответил на вопрос Python, который "требуется" наследуя класс от int (неизменный тип в Python). В последнее время я занимался Lua, и, отвечая на вопрос, я подумал; "Как это делается в Lua?"

Итак, могу ли я наследовать класс от неизменяемого типа в Lua? Если да, то как? И если наследование от класса, такого как целое число, невозможно, есть ли другой способ реализовать поведение, подобное тому, что было в моем ответе на вопрос о Python?

Кстати, у меня все еще довольно много проблем с пониманием метатаблиц Lua.


person Community    schedule 10.05.2013    source источник


Ответы (1)


Во-первых, в Lua нет объектно-ориентированной политики. Из ПиЛ2, глава 15:

Обычно Lua не устанавливает политики. Вместо этого Lua предоставляет механизмы, достаточно мощные, чтобы группы разработчиков могли реализовать наиболее подходящие им политики.

В Lua существует множество подходов к объектно-ориентированному программированию.

В Lua int не является классом. Это даже не тип (по умолчанию Lua использует C double для представления чисел).

Тем не менее, можно использовать metatable, чтобы сделать table неизменяемым. Итак, если вы используете table для реализации своих классов (или прототипов), то вы, безусловно, можете наследовать от них. Вы также можете использовать userdata для своего класса или прототипа, и его (не)изменяемость будет установлена ​​вашей библиотекой C, которая создает userdata.

Вы можете прочитать о неизменяемых table в PiL 13.4.5. Вам следует прочитать главы 13 и 16, чтобы узнать о метатаблицах и ООП в Lua.

Если вам нужны дополнительные примеры, пакет LOOP реализует несколько моделей ООП.

person Doug Currie    schedule 10.05.2013