ячейке этой таблице ссылку на значение (number или string) из другой таблице? Чтобы при изменении значения x в таблице B оно также менялось в таблице A?
Гипотетически, но нужны прокси-таблицы. tableA, tableB = {}, {} proxtA, proxtB = {}, {} local function __newindex(t, k, v) rawset(tableA, k, v) rawset(tableB, k, v) end setmetatable(proxtA, {__index = tableA, __newindex = __newindex}) setmetatable(proxtB, {__index = tableB, __newindex = __newindex}) Для изменения и получения ключей используешь прокси. Они пустые.
Пойду почитаю по-подробнее про прокси-таблицы, спасибо
А теперь главный вопрос: зачем оно тебе? ))
аниматор делаю с конечным автоматом... если при иницализации нового состояния не указать какие-то параметры, то они берутся из default состояния. нужно чтобы во время игры при изменении default во всех состояниях что взяли его значение значение тоже поменялось
Я бы сделал одну табличку(1) с парами ключ - хранимое значение. Во всех других таблицах хранил не данные, а этот ключ. Данные брал соответственно из таблички (1) непосредственно перед использованием.
metatable с __index ключем это именно то, что мне нужно
Я с метатаблицами не очень дружу. Как прокси не применял их не разу. В основном я делаю примитивное ООП на __index, без наследования даже.
Побаиваюсь метатабличек потому что для меня не всегда очевидно то, что они делают, даже после прочтения доков. Первое время вообще воткнуться не мог как работают слабый ключ/слабое значение, допустим. Так что я тоже дальше примитивного ООП стараюсь не уходить. Чем больше приходится умственных усилий приложить для понимания принципа работы используемых методов, тем выше вероятность прострелить себе ногу, используя эти самые методы.
Именно неочевидность. Иногда я думаю они полезны. Это как в c++ типы с перегруженными методами. Вроде удобно, но легко запутаться.
Время, которое я уделяю тому или иному инструменту программирования зависит как раз от его уровня очевидности. Именно по этому я не трогаю кресты и подобные им от слова совсем. Я не получаю ни качественного результата, ни удовольствия от разработки на неочевидных инструментах.
Не получаю удовольствия от плюсов. Некоторое время изучаю Раст. Там свои косяки - долгая компиляция, текут версии пакетов постоянно. Непривычный язык, но писать на нем - в охоточку! На привычные вещи смотрю новым взглядом.
Чем больше используешь тем проще и очевиднее становится. Я настолько преисполнился, что в доку давно не смотрю. Единственное где можно прям напороться — на неиспользовании rawset в тех местах, где он может привести к рекурсии метатаблички.
снюс, сори за прямолинейность, а как на сях реализовали метатаблицы в луа?
Так-то да, но чем выше изначальный уровень неочевидности, тем сильнее инструмент меня отталкивает.
Схема очень простая и очень логичная, а если ты будешь забивать на всё непонятное - у тебя как бы не будет стимула развиваться.
Спорное утверждене. Знать и уметь нужно, но пользоваться не обязательно. Это как на плюсах пишешь когда - на мой взгляд лучше ограничить себя подмножеством языка. Фичи лучше знать все практически, но не в совершенстве. И в каждом проекте выбирать - стиль Си с классами и нет? Исключения или нет? Умные указатели или нет? И так далее.
Обсуждают сегодня