Описание тега meta-method
Все, что связано с мета-методами Lua (также известными как метаметоды), то есть функциями, которые изменяют поведение таблицы Lua в контексте некоторых операций (например, математические операции, доступ к элементам, сборка мусора и т. Д.). Мета-методы могут использоваться для реализации объектно-ориентированного программирования и других мощных методов с использованием таблиц Lua.
1
ответ
Почему вы можете установить __index равным таблице
Метаметод индекса может быть установлен равным таблицам. Из того, что я могу сказать foo.__index = function(self, k) return bar[k] end а также foo.__index = bar подобные. Почему объявление функций таким образом разрешено в этой ситуации?
02 июн '17 в 04:00
2
ответа
Метаметоды и классы
Я создал функцию, аналогичную показанной здесь, и у меня возникли проблемы с метаметодом __add. Я хочу иметь возможность использовать метаметод __add в двух экземплярах класса, но единственный способ, которым он работает, - добавить метаметоды в мет…
16 ноя '15 в 15:28
1
ответ
Ищет ли next() метаметод __pairs?
В общем, синтаксис: for k, v in pairs(t) do .... end эквивалентно: for k, v in next, t do .... end Но что, если t имеет __pairs Метаметод? Будет стандарт next() проверка функции для этого? Если нет, то не лучше ли всегда использовать pairs при переб…
11 апр '15 в 16:07
1
ответ
Создать новый экземпляр определенного типа пользователя
Я использую tolua++ для автоматического предоставления типов C++ Lua. Кажется, что когда я выставляю какой-то тип, например struct TestComponent { float foo; string bar; } Что толуа делает (по крайней мере, так мне кажется), так это добавляет новую …
02 июл '14 в 11:54
1
ответ
Сделать метод lua, который может напрямую изменять аргументы
Как создать метод, как string.gsub(...) в Луа? Я хочу, чтобы моя функция могла изменить аргументы, которые я передаю в функцию. Я знаю, что строковые и числовые переменные типа передаются по имени ( CALL BY VALUE) в функциях, но я не знаю, как gsub …
21 июн '13 в 16:50
1
ответ
Lua - __newindex метаметод для существующего индекса?
Недавно я узнал о существовании метатаблиц в Луа, и я играл с ними, пока не пришла в голову мысль: можно ли будет использовать их, чтобы попытаться избежать "дубликатов" в таблице? Я искал и искал и до сих пор не мог найти то, что я ищу, так что я з…
12 авг '17 в 21:35
3
ответа
Как мы изменим способ отображения таблицы
Предполагая, что у меня есть кусок кода, такой как следующий aTable = {aValue=1} aTable_mt = {} print(aTable) Что я должен сделать, чтобы Lua напечатал что-то вроде aTable current aValue = 1 в отличие от table: 0x01ab1d2, До сих пор я пытался устано…
15 апр '15 в 00:07
2
ответа
Доступ к указателям внутри мета-метода __eq?
У меня есть объекты Lua, которые разделяют метатаблицу, которая имеет __eq Метаметод. В этом мета-методе я хочу проверить, являются ли два объекта одним и тем же объектом, прежде чем даже сравнивать их. Подобно тому, как в Java вы бы сделали a == b …
03 фев '18 в 09:18
1
ответ
Разве наследование Lua не включает метаметоды?
Я пытаюсь реализовать простое наследование в Lua, как это представлено в PIL 16.2. Однако я столкнулся с удивительным поведением: метаметоды, похоже, не наследуются. В следующем примере я создаю класс Point с x а также y члены, и дать ему __add Мета…
25 мар '16 в 22:37
1
ответ
Lua C++ матрица пользовательских данных доступа к элементам
У меня есть класс матрицы в C++, и конструктор выглядит следующим образом: template <typename T> CMatrix<T>::CMatrix(unsigned int varrow,unsigned int varcolumn) { //Lets set member variables this->m_row=varrow;this->m_column=varcol…
17 сен '15 в 23:22
1
ответ
Прикрепление метатаблиц в пределах вкладок
У меня есть парсер, который анализирует файл конфигурации и создает таблицу. Полученная таблица может выглядеть примерно так: root = { global = { }, section1 = { subsect1 = { setting = 1 subsubsect2 = { } } } } Цель состоит в том, чтобы иметь таблиц…
02 окт '15 в 02:08
1
ответ
Почему это вызывает переполнение стека C?
Я знаю, что могу решить эту проблему с помощью rawset, но мне просто интересно, почему следующий код вызывает переполнение стека C. local mt = { __newindex = function(self, key, value) self[key] = value end } local x = setmetatable({}, mt) x.y = 5
25 окт '14 в 06:19
2
ответа
Как создать простой импортируемый класс в Lua?
Я хотел бы создать MyClass класс в Lua в отдельном файле myclass.lua, который я могу импортировать и использовать позже. Это должно работать следующим образом: local MyClass = require 'myclass' tab = {1,2,3} m = MyClass(tab) Однако, следуя коду в Lu…
22 май '17 в 18:44
1
ответ
Сохранить наследуемый член таблицы в дочерний класс, если __index вызывается объектом дочернего класса
Моя цель состоит в том, чтобы иметь стандартный способ создания классов с полноразмерным множественным наследованием и возможностью не только наследовать другие классы, но и экземпляры самих себя через new()-конструктор. Если я вызываю отсутствующее…
21 апр '14 в 09:59
0
ответов
Lua __index metamethod не связан с C++
Я разрабатываю библиотеку программного обеспечения для проектов электроники в Lua, которая является объектно-ориентированной. Мои объекты имеют свойства с геттерами и сеттерами, которые реализуются с метаметодами __index и __newindex соответственно.…
12 апр '14 в 13:35
1
ответ
Точка таблицы на другой стол в Lua
Есть ли способ указать таблицу на другую таблицу? например: local a = {} local b = {} a.name = "Josh" print(a.name) -- Prints 'Josh' print(b.name) -- Prints 'Josh' aswell a.name = "I don't have a name" print(a.name) -- Print 'I don't have a name' pr…
23 ноя '14 в 04:00
0
ответов
Распечатать весь метатабильный контент
У меня есть таблица: [кнк] = (table) [20-6-2014] = (table) [16] = Steve,Maria [16-6-2014] = (table) [17] = Elice, Hans [18] = Steve, Maria, Hans И у меня есть грязный, но рабочий код: function af.info(farm_name,date,time,name_string) r=os.date("*t")…
15 июн '14 в 12:29
2
ответа
Lua override # для строк
Я пытаюсь реализовать свой собственный метод длины для строк в Lua. Я успешно переопределил метод len() для строки, но я не знаю, как это сделать для оператора #. orig_len = string.len function my_len(s) print(s) return orig_len(s) end string.len = …
15 апр '14 в 13:29
2
ответа
Доступ к глубоко вложенной таблице без ошибок?
Для поля внутри глубоко вложенной таблицы, например text.title.1.font. Даже если вы используете if text.title.1.font then ... end это приведет к ошибке, такой как "попытка индексировать глобальный" текст "(нулевое значение)", если какой-либо уровень…
21 май '14 в 09:26
1
ответ
Путаница с использованием "." нотация с __index и пространством имен в Lua
Я запутался в следующих двух синтаксисах, используя "." Из того, что я понимаю, __index вызывается, когда ключ не существует в таблице, но существует в ее метатабельной таблице. Так почему же вызывается таблица списка __index а затем назначить себя …
17 дек '14 в 06:52