Size: a a a

2020 April 22

S

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

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

S

Snusmumriken in pro.lua
В целом, метатаблицу можно прицепить к трём типам: к таблицам, к cdata и к строкам. Но строки мы пока отметаем, пусть работают как работают, они и так хороши.
источник

AY

Arslan Yulbirdin in pro.lua
Snusmumriken
В целом, метатаблицу можно прицепить к трём типам: к таблицам, к cdata и к строкам. Но строки мы пока отметаем, пусть работают как работают, они и так хороши.
Нужно ещё к строкам __index подцепить в идеале
источник

S

Snusmumriken in pro.lua
Всмысли? Он там и так есть. Натравлен на таблицу string.
источник

S

Snusmumriken in pro.lua
local a = "qwerty"
print( a:sub(3, 3) ) --> "e"


Строки — уже с метатаблицей, в которой есть __index.
источник

AY

Arslan Yulbirdin in pro.lua
В смысле обращение к символу в строке через оператор []
источник

S

Snusmumriken in pro.lua
Это бешеный оверхед.
источник

S

Snusmumriken in pro.lua
Во-первых, это нехило замедляет доступ к обычным методам строки, во-вторых — оверхед.
В третьих — это будет обращение к байту а не к символу, если встраивать utf8 с обращением именно к юникод-символу — оно будет ещё медленнее ))

Кароч, игра не стоит свеч.
источник

S

Snusmumriken in pro.lua
А в четвёртых — это изменение поведения стандартной библиотеки. Что является весьма нехорошим делом.
источник

AY

Arslan Yulbirdin in pro.lua
А если через __call сделать?
источник

S

Snusmumriken in pro.lua
Ой-ой ))
источник

AY

Arslan Yulbirdin in pro.lua
Он же не используется
источник

S

Snusmumriken in pro.lua
Гипотетически — конечно можно. Но всё равно не надо.

Представь что ты опечатался, и вместо функции послал в качестве какого-нибудь колбека строку. И его начали вызывать со странными аргументами (колбековыми), и всё падает, весьма громко но очень непонятно ))
источник

I

Igor725 in pro.lua
Это прям что-то совсем жуткое
источник

S

Snusmumriken in pro.lua
Когда я был маленький, мне тоже хотелось всё расширять и поливать сиропом синтаксического сахара. А потом я такой увидел, что код превращается во что-то странное, типа:

local a = foo"blabla"{bar = 123}"foo""bar"

В луа можно так делать. Но не нужно ))
источник

AY

Arslan Yulbirdin in pro.lua
Ох ох
источник

AY

Arslan Yulbirdin in pro.lua
Это как?
источник

I

Igor725 in pro.lua
Я одно время для метатаблицы строк определял __add, чтобы их конкатить, но потом произвёл замеры времени исполнения своего оператора и стандартной конкатенации и что-то перехотел таким заниматься
источник

S

Snusmumriken in pro.lua
Arslan Yulbirdin
Это как?
Функция foo вызывается со строкой "blabla", и возвращает функцию, которая принимает первым аргументом таблицу, и возвращает функцию, которая принимает строку "foo"..
источник

AY

Arslan Yulbirdin in pro.lua
Ухты
источник