Snusmumriken
Snusmumriken
Подобный поиск можно организовать в цепочку, и искать недостающие ключи в целой куче таблиц, у которых есть метатаблицы с __index.
Ameliance
Snusmumriken
Мы добавляем Child'у лишнюю таблицу для поиска недостающего. Да.
Snusmumriken
Никаких копирований, исключительно "если не найдёшь у себя — поищи ещё и здесь".
Ameliance
Ameliance
*таблицы
Snusmumriken
Равно вместо точки.
Snusmumriken
Если хочешь связать Button и Element —
Element = {a = 10}
Button = setmetatable({b = 20}, {__index = Element})
В данном примере, можно заметить три таблицы:
Element, Button и управляющую, которая сразу посылается в setmetatable>Button.
Snusmumriken
Тебя интересует вопрос, что будет если их связать с setmetatable?
Ameliance
Ameliance
вернее получается что да
Snusmumriken
Ну шо, тут таблица и там таблица. Есть две таблицы ))
Snusmumriken
Друг с другом никак не связаны.
fgntfg
знаешь чят, есть одна таблица...
Snusmumriken
Ух, а она тебя не знает
Snusmumriken
нет, просто хочу понять разницу
Метатаблица — это тоже просто самая обыкновенная таблица, но благодаря специальным ключам она меняет поведение тех, кто к ней привязан.
Позволяет вызывать привязанные к мете таблицы как функции (__call), позволяет одной таблице искать недостающее в другой (__index), складывать и т.д.
Snusmumriken
Snusmumriken
Давай по второму разу.
Snusmumriken
Перейди к следующему.
Snusmumriken
Мб __index станет чуть попроще.
Ameliance
просто это то, что мне как раз и нужно...
Спасибо огромное, думаю, мне нужно отдохнуть... Завтра нужно будет еще разок пройтись, поэкспериментировать, а тогда опять если что уточнить
Snusmumriken
Там даже картинка цепочек поиска по __index есть.
Ameliance
Arslan
В смысле ты так стремишься изучить язык что читаешь статьи и обсуждешь примеры
Snusmumriken
Ну норм, в чём проблема?
Snusmumriken
Тут же что: узнал метатаблицы — всё, язык уже практически изучен, остаётся только догонять граничные случаи и странное поведение, веселиться и т.д, самый сложный период закончен.
Arslan
Просто я начинал с c++, чуть не застрелился, но теперь мне достаточно просто изучить яп, прочитав 5 - ти минутный гайд и попробовать что нибудь написать, и все! А дальше дальше более глубокое изучение
Snusmumriken
Ну вот некоторые начинают с другого конца, всё в порядке.
Ameliance
Просто я начинал с c++, чуть не застрелился, но теперь мне достаточно просто изучить яп, прочитав 5 - ти минутный гайд и попробовать что нибудь написать, и все! А дальше дальше более глубокое изучение
ну луа не первый же язик.. я начинал с mobile basic, затем паскаль, борланд С/С++, actionscript через 10 лет вернулся в программирование на javascript, lua, autohotkey, но реально глубоже всего наверное был в мобаилбеисике и луа
пытался другие учить, но такое себе
Ameliance
опыт есть, но в основном все но особо глубоко...
Ameliance
помню после 12 ночи читал про ООП в С++, так мозги выворачивало... но уже ничего не помню
Arslan
Snusmumriken
Ух, вечер воспоминаний!
А я такой долго не хотел учиться прогать, ковырял игродвижки (construct/gml/) начал с сишки, поковырял минимально, испугался и быстро нашёл луа через love2d и пару лет просидел на неё. Потом расширился в C/JS/Python И т.д, вот ща ещё D ковыряю ))
Ameliance
Я спрашивал людей что лучше всего учить, мне скзали нейтив реакт или что-то типа того
Ameliance
лучше = актуальней
Ameliance
Но я поставил девкит от андроида и как-то на этом все
Arslan
Новичкам всегда советуют актуальное
Ameliance
Вчера думал все таки попробовать начать С++, но сейчас то что не кормит сложно учить, когда родители кормят можно учить что хочешь
Snusmumriken
ЯП учится под цель. Какие задачи — такие ЯП.
Arslan
Ameliance
Arslan
Змейка присутствует
Arslan
Ещё и свой собственный ЯП придумал в стиле bash
Arslan
Есть встроенные функции копирования таблиц?
Igor
Там несколько способов, выбирай какой больше понравится
Arslan
Спасибо
Snusmumriken
Копирование таблиц — довольно таки специфический процесс:
1. А надо ли нам копировать вложенные таблицы? Если да — придётся следить за внутренней зацикленностью.
2. А надо ли нам копировать метатаблицы?
3. А а как поступать с cdata?
4. А с функциями? А если функции с upvalue? А если в upvalue функций есть cdata? А если там таблицы с метатаблицами?
Arslan
А что с user dat`ой не так?
Snusmumriken
Ну, можно копировать ссылку, а можно заставлять инициализировать новую.
Arslan
User data передается по ссылке, это я проверил
Snusmumriken
Передаётся. А вдруг нужно скопировать.
Arslan
Snusmumriken
Создание новой и приведение её в тот же вид что и старая.
Snusmumriken
То есть, может понадобиться создать реестр всей cdata, с функциями создания дубликатов.
Snusmumriken
Ну в общем-то, лично я плохо представляю как должна выглядеть deepest-table-copy, потому что самое крутое что видел — копирование таблицы с учётом потенциальных внутренних зацикленностей, и установка той же метатаблицы что у оригинала.
О, кстати, те же вопросы с сериализацией. Допустим, у нас есть некоторая табличка, которую нужно сериализовать. Типа, что делать с функциями с upvalue и прочей фигнёй? ))
Arslan
Чем отличается require от loadfile?
Snusmumriken
Первое — умное, второе — глупое.
require — смотрит скрипт сразу по множеству путей в package.path и package.cpath, умеет загружать C-библиотеки, кеширует результаты и так далее.
loadfile — просто открывает скрипт по абсолютному пути и выполняет.
Kirill
Всем привет, добил LRDB. Кому интересно патчик: https://pastebin.com/t96SDJ4A
заменяет имя файла содержимым.
Anonymous
Arslan
В официальной документалке к знаку присвоения приставлены два двоеточия. Думал это просто ошибка подсветки кода, но погуглив увидел что это полноценный оператор и используется он для меток. С метками то понятно, а что делает "::="?
🐅🤦♂️
Arslan
Все таки описание синтаксиса
Arslan
Спасибо
Александр
Подскажите, какие есть альтернативы luajit?
Сижу на lua 5.3, слезть нет варианта (пользователи привыкли, скрипты переписывать не будут). luajit, как известно, 5.3 не поддерживает. Может есть другие варианты, сторонние реализации? Я бы поизучал
Ameliance
Давай по второму разу.
#вопрос
ковыряюсь, по ходу немного продвинулся в понимании, но есть один пока притык.. почему setmetatable дает ничего
Arslan
Может так:
setmetatable(megalamp,{__index=lamp})
Arslan
Даёт возможность обращаться к методам lamp из megalamp
Ameliance
Arslan
Ameliance
С этим пробовал?
да мне не решение нужно, а понимание, решение есть на картинке... там есть и так и так...
Arslan
Leon174
Александр