#string #methods #lua #lua-table
#строка #методы #lua #lua-таблица
Вопрос:
Мы можем сделать или string.split("1,2,3",",")
то, или ("1,2,3"):split(",")
другое и получить тот же результат.
Однако tab = {} table.insert(tab, "hi")
работает, пока tab = {} tab:insert("hi")
выдает ошибку
tab = {} вкладка:вставка («привет»):1: попытка вызвать нулевое значение
Это кажется непоследовательным, я делаю что-то не так или есть веская причина, по которой вызов методов в Lua отличается?
Спасибо,
Ответ №1:
Это потому, что строки имеют метатаблицу по умолчанию в Lua, а таблицы — нет. Вы можете установить метатаблицу самостоятельно:
local tab = setmetatable({}, {__index = table})
tab:insert("hi")
print(#tab)
Это должно вывести 1. Подробности см. в разделах 2.4 и 6.4 руководства по Lua.
Комментарии:
1. Вау, большое вам спасибо!!! В качестве продолжения, возможно ли установить это как глобальное поведение для всех таблиц?
2. Я не думаю, что это возможно с таблицами (по крайней мере, без настройки источника), но, возможно, другие тоже могут прокомментировать это.
3. Я немного поэкспериментировал и прочитал документацию. Не будучи уверенным в изменении метаданных базовой таблицы, я смог просто создать новый объект базовой таблицы, к которому я могу добавить дополнительное поведение и работать в качестве своей базы. Спасибо!