Описание тега 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 …
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
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 = …
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