lua и методы, путаница

#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. ну ладно. полагаю, тогда мне придется научиться использовать метатаблицы.