Size: a a a

2021 August 13

S

Snusmumriken in pro.lua
Молодец, возьми с полки пирожок. Но задачка не для твоего уровня, она попроще.
источник

CP

Companion Philipp in pro.lua
Подразумеваешь, что есть еще решение попроще?
источник

S

Snusmumriken in pro.lua
Нет, это действительно метатаблицы, только выглядит примерно как
"Дети, вот вам задачка, с какой скоростью корабль доплывёт из пункта А в пункт Б, если ...." и тут препод по математике из соседнего кабинета приходит и такой "2км/ч и всё".
источник

AM

Alexander Mitichev in pro.lua
Интереснее было бы, конечно, как-то вот это сделать
...
tbl = {}


function tbl.foo(a, b)
 print("Hello", a + b)
end

function tbl.foo(a, b)
 print("World", a - b)
end

tbl.foo(10, 20)
> Hello 30
> World -10
источник

AM

Alexander Mitichev in pro.lua
Конкретно вот это можно сделать, конечно, переопределив print
источник

AM

Alexander Mitichev in pro.lua
А, нет... что-то хитрее должно быть
источник

S

Snusmumriken in pro.lua
Ну, суть не в том чтобы вывод соответствовал, а в том чтобы все функции работали даже при переопределении.
источник

AB

Artem Benois in pro.lua
через метатаблицы можно провернуть __newindex
источник

S

Snusmumriken in pro.lua
А попробуй сделать )
Оно чуть забавнее чем кажется.
источник

AM

Alexander Mitichev in pro.lua
Это если многоточие бы стояло после tbl = {}
источник

S

Snusmumriken in pro.lua
Изменение полного механизма таблиц? )
источник

AM

Alexander Mitichev in pro.lua
Можно повесить метатаблицу на _G, где в newindex проверять type и если это table, то там уже навешивать сверху метатаблицу, которая на новые индексы может навешивать, например __call
источник

AM

Alexander Mitichev in pro.lua
Вот это будет пушка, конечно
источник

S

Snusmumriken in pro.lua
Методика странная, и работает увы только с глобалами
источник

AB

Artem Benois in pro.lua
сдаюсь, у меня терпения не хватит добить эту задачку сейчас)))
источник

ВГ

Виктор Гриневский 🐧... in pro.lua
stor = {}
tbl = setmetatable(
       tbl,
       {
           __newindex = function(self, key, foo)
               stor[key] = stor[key] or {}
               table.insert(stor[key], foo)
           end,

           __index = function(self, key)
               return function(...)
                   for _, f in ipairs(stor[key]) do
                       f(...)
                   end
               end
           end
       }
   )
источник

ВГ

Виктор Гриневский 🐧... in pro.lua
Ну то есть тут базовое решение довольно простое
источник

ВГ

Виктор Гриневский 🐧... in pro.lua
А всё же сделать так, чтобы объявляешь любую глобальную таблицу и она становится волшебной - так сильно интереснее
источник

S

Snusmumriken in pro.lua
Хорош )
источник

AB

Artem Benois in pro.lua
я такое же начал писать, но что-то у меня оно не заработало и я теперь понял что я сделал не так)
источник