2016-04-21 5 views
1

Я начинаю программировать в целом, и я пробовал несколько разных языков. В Lua есть таблицы, которые кажутся как супер списки (массивы, словари, перечислены все в одном), но в Lua можно это сделать:В чем разница между таблицами Lua и классами?

player = { health = 100, attack = 50, mana = 54 } 
print(player.health) 

и вернется 100. Но в других программах языков, вам нужно будет сделать класс, чтобы получить тот же результат. Но из моего понимания, у Луа есть классы, а также таблицы? Но таблицы, похоже, действуют очень похоже, так ли они одинаковы? Если нет, что отличает их друг от друга и каковы преимущества и недостатки использования?

+0

Нет. В верхней части моей головы C структур или таблиц JavaScript и почти любой другой язык, который использует '.' для адресации хеш-таблиц или обеспечивает синтаксический сахар, будет работать точно так же. –

+1

У Lua нет классов. Есть способы подражать им с metatables, но ничего не встроено. –

+1

Значение таблицы Lua - это словарь, период. Синтаксис Lua позволяет вам построить таблицу из списка полей с использованием подразумеваемых целых ключей в соответствии с документированными правилами. –

ответ

8

Но из моего понимания, у Луи есть классы, а также таблицы?

Нет, это не так.

Lua (игнорируя материал C API) имеет ровно одну сложную структуру данных: таблицы.

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

В Lua каждая сложная вещь на ее базовом уровне - это таблица. Или, если это из C API, userdata.

Класс в основном прототип для создания объектов. Вы объявляете, что класс имеет в нем элементы X, Y и Z, тогда вы создаете объект этого типа класса, который будет содержать в нем элементы X, Y и Z.

Вы можете создавать таблицы Lua, которые имитируют поведение классов. Но в Lua нет языковой конструкции, которая формально похожа на класс.

2

У Lua нет классов, кроме только таблиц, с метаматериалами. Lua использовать прототип для реализации OOP

1

Я думаю, вы сбиты с толку, потому что object.attribute обычно используется на других языках для доступа, очевидно, к атрибутам объекта.

В любом случае, поскольку у Lua нет классов, точка может использоваться для доступа к полям таблиц, а table.field работает точно так же, как и запись table["field"].

 Смежные вопросы

  • Нет связанных вопросов^_^