#methods #lua
Вопрос:
я пытаюсь понять, как создавать методы для использования в моем коде, и это довольно сбивает меня с толку
я попытался использовать этот код:
string.testfunc = function(s) print(s) end a="foo" a:testfunc() --inputting a non-string value into the function gives an error gt;foo
затем я попробовал этот фрагмент кода
table.testfunc = function(s) print(s[1]) end a={1,2} table.testfunc(a) gt;1 a:testfunc() --this will always error, no matter the type of the varible gt;method 'testfunc' is not callable (a nil value)
как получилось, что я могу создать метод в таблице строк и заставить его нормально работать со строками, но не с таблицами? и почему создание одного из них со столами не работает?
Комментарии:
1.
function a:testfunc(i) print(self[i]) end
если вам нужна функция для нескольких таблиц, вам понадобятся метатабли
Ответ №1:
Библиотека строк в Lua задает метаметод индекса для всех строк.
Библиотека таблиц в Lua не устанавливает метаметод индекса для всех таблиц, поскольку таблицы используются для представления объектов. Обычно объекты одного и того же класса используют один и тот же метатабель.
Комментарии:
1. ну ладно. полагаю, тогда мне придется научиться использовать метатаблицы.