Size: a a a

2020 April 22

A

Ameliance SkyMusic in pro.lua
просто в моем коде если я пишу вариант 1. или 2. не происходит никакой разницы...
источник

A

Ameliance SkyMusic in pro.lua
я уже запарился😢
источник

A

Ameliance SkyMusic in pro.lua
читал уже, не нашел описания что такое метатаблица
источник

IB

Ivan Bessarabov in pro.lua
глава 13, страница 156 "Метатаблицы и метаметоды"
источник

A

Ameliance SkyMusic in pro.lua
Ivan Bessarabov
глава 13, страница 156 "Метатаблицы и метаметоды"
читал не нашел
источник

A

Ameliance SkyMusic in pro.lua
Метатаблица — это таблица где собраны все возможные операции с значением (переменной, текстом, функцией... а в данном случае с таблицей )?

То есть метатаблица это набор (таблица) метаметодов (функций) которые выполняются когда мы хотим что-то сделать со значением?

То есть
a = 5
b = 10
c = a + b
означает
c = c.__add(a, b)
и в итоге
c = a + b

выдаст с = 15

А если сделать так
setmetatable(с,  {__add = function(a, b) return a - b end})
то
c = a + b
будет с = -5, а
d = a + b
по прежнему будет d = 10
?
источник

A

Ameliance SkyMusic in pro.lua
я так понимаю я уже ближе?
Вопрос если здесь написать то «родительскую таблицу цифер» (подскажите где найти), то у меня получится сделать, что + будет вычитать?родительскую таблицу строки
источник

I

Igor725 in pro.lua
Ameliance SkyMusic
я так понимаю я уже ближе?
Вопрос если здесь написать то «родительскую таблицу цифер» (подскажите где найти), то у меня получится сделать, что + будет вычитать?родительскую таблицу строки
Это так не работает
источник

I

Igor725 in pro.lua
У чисел нет метатаблиц, getmetstable('вообщечтоугодно') вернёт метатаблицу строки
источник

S

Snusmumriken in pro.lua
Поправка.

То есть
a = 5
b = 10
c = a + b
означает
c = a.__add(a, b)
мы складываем a и b, должен вызваться метаметод у a
и в итоге
c = a + b
выдаст с = 15

Но у чисел действительно нет метатаблиц, это бы вызвалось будь a и b строками/таблицами/cdata
источник

A

Ameliance SkyMusic in pro.lua
Igor725
Это так не работает
это я понял, потому и написал «подскажите где найти»... и да, где-то видел в интернете запрос на добавление этой функции, но не был в курсе добавили ли
источник

S

Snusmumriken in pro.lua
Ameliance SkyMusic
это я понял, потому и написал «подскажите где найти»... и да, где-то видел в интернете запрос на добавление этой функции, но не был в курсе добавили ли
Кароч, наличие метатаблицы само по себе — не определяет где детишки ищут недостающие ключи, детишки ищут ключи только и исключительно по __index своей метатаблицы. Если у метатаблицы есть такое поле — они доискивают. Нет поля — нет доискивания.
источник

A

Ameliance SkyMusic in pro.lua
Snusmumriken
Кароч, наличие метатаблицы само по себе — не определяет где детишки ищут недостающие ключи, детишки ищут ключи только и исключительно по __index своей метатаблицы. Если у метатаблицы есть такое поле — они доискивают. Нет поля — нет доискивания.
опять меня запутал😅
источник

S

Snusmumriken in pro.lua
a = {}
b = {}
setmetatable(a, b)

Ничего не изменилось. a не стало где-то доискивать ключи, потому что у b нет специальных полей.
Добавим в b поле __index и a начнёт доискивать по этому полю ключи. Удалим это поле — перестанет. Добавим — начнёт, удалим — перестанет.

Добавим в b поле __add с функцией — и a можно будет складывать со всякой фигнёй. Удалим — нельзя будет складывать.

Вся суть метатаблиц — в специальных полях. Без полей они бесполезны.
источник

I

Igor725 in pro.lua
Я что-то заметил, что почти всем трудно даются метатаблицы.
источник

A

Ameliance SkyMusic in pro.lua
Snusmumriken
a = {}
b = {}
setmetatable(a, b)

Ничего не изменилось. a не стало где-то доискивать ключи, потому что у b нет специальных полей.
Добавим в b поле __index и a начнёт доискивать по этому полю ключи. Удалим это поле — перестанет. Добавим — начнёт, удалим — перестанет.

Добавим в b поле __add с функцией — и a можно будет складывать со всякой фигнёй. Удалим — нельзя будет складывать.

Вся суть метатаблиц — в специальных полях. Без полей они бесполезны.
Метатаблица — это таблица где собраны все возможные операции со значением (переменной var, текстом 'string', функцией func() ... а в данном случае с таблицей tab={})?

То есть метатаблица это набор (таблица) метаметодов (функций __index, __add) которые выполняются когда мы хотим что-то сделать со значением?
источник

S

Snusmumriken in pro.lua
Когда мы хотим что-то сделать с таблицей, у которой есть эта метатаблица. Да.
источник

S

Snusmumriken in pro.lua
Определяются перегрузки операторов и всякая специальная фигня.
источник

IB

Ivan Bessarabov in pro.lua
Snusmumriken
Кароч, наличие метатаблицы само по себе — не определяет где детишки ищут недостающие ключи, детишки ищут ключи только и исключительно по __index своей метатаблицы. Если у метатаблицы есть такое поле — они доискивают. Нет поля — нет доискивания.
а еще значение  __index может быть не таблицей, а функцией =)
источник

S

Snusmumriken in pro.lua
Ivan Bessarabov
а еще значение  __index может быть не таблицей, а функцией =)
Это потом.
источник