Size: a a a

2019 December 03

MT

Monsieur Taishín in pro.lua
Igor725
У таблицы buttons, кстати, как я понял, последовательные индексы, pairs можно не использовать, он помедленнее обычного цикла будет. Хоть внутри хендлера кнопки это не так уж и критично, но всё же
да в модуле будет не только баттонс но и другие вещи. такое как виджет с текстом и тд
источник

I

Igor725 in pro.lua
Ну таблица то всё равно однородная получится
источник

I

Igor725 in pro.lua
С последовательными индексами
источник

I

Igor725 in pro.lua
Другое дело, если из неё нужно будет что-то удалять
источник

I

Igor725 in pro.lua
Вот тут уже запарно
источник

I

Igor725 in pro.lua
Можно в принципе обратным циклом проходиться по таблице, и из него удалять уже ячейки таблицы с помощью table.remove
источник

MT

Monsieur Taishín in pro.lua
ну, быстродействие некритично,
источник

MT

Monsieur Taishín in pro.lua
только как-то апдейтить бы
источник

MT

Monsieur Taishín in pro.lua
текст
источник

S

Snusmumriken in pro.lua
Шмель Тяжеловес
-- buttons.lua
local buttons = {}
function createBtn(x,y,w,h,txt, handler)
   html = [[<div style="position:absolute; top:]]..y..[[; left:]]..x..[[vw; width:]]..w..[[vw; height: ]]..h..[[vh">]]..text..[[</div>]]
   screen.setHTML(x,y,html)
   buttons[buttons + 1] = {x=x,y=y,x1=w+x,y1=h+y, handler = handler}
end
for _, but in pairs(buttons) do
 if x<but.x  and x<but.x1 and y > but.y and but.y1 then
    but.handler()
 end
end
return { createBtn = createBtn }
-- other file
local createBtn = require "buttons".createBtn
createBtn(1,1,2,2, "Hello", function() end)
createBtn(5,4,2,2, "Hello", function() end)
-- str = "Hello %item%!"
-- tfill(str, {item = "world"})
function tfill(tmpl, tbl)
 local function replace(c)
   return tbl[c] or '%' .. c .. '%'
 end
 return tmpl:gsub('%%(.-)%%', replace)
end

local templates = {}
templates.button = [[
<div style="position:absolute; top:%y%; left:%x%vw; width:%w%vw; height: %h%vh">%text%</div>]]

local buttons = {}
function createButton(info)
 info.html = tfill(templates.button, info)
 table.insert(buttons, info)
end

createButton{x=10, y=20, w=100, h=200, text="Yo" }
источник

ШТ

Шмель Тяжеловес in pro.lua
Igor725
У таблицы buttons, кстати, как я понял, последовательные индексы, pairs можно не использовать, он помедленнее обычного цикла будет. Хоть внутри хендлера кнопки это не так уж и критично, но всё же
Я что-то запамятовал про
ipairs
Чаще циклом for со счетчиком польдузюсь
источник

S

Snusmumriken in pro.lua
for i, v in ipairs(t) do ... end
источник

T

The Dormouse in pro.lua
Шмель Тяжеловес
Я что-то запамятовал про
ipairs
Чаще циклом for со счетчиком польдузюсь
По некоторым гайдлайнам ipairs лучше не использовать.
источник

S

Snusmumriken in pro.lua
Да не, вполне можно использовать. Но только в некритичных по времени циклах: он в полтора раза медленнее for i = 1, #tbl do.
источник

T

The Dormouse in pro.lua
В этом таки есть смысл.
источник

T

The Dormouse in pro.lua
Snusmumriken
Да не, вполне можно использовать. Но только в некритичных по времени циклах: он в полтора раза медленнее for i = 1, #tbl do.
Не в производительности дело, а в семантике. Кажется, что это цикл по элементам, а на самом деле — до первой дырки.
источник

T

The Dormouse in pro.lua
Впрочем, получение длины массива для for тоже не совсем предсказуемо для начинающих луашников.
источник

S

Snusmumriken in pro.lua
The Dormouse
Не в производительности дело, а в семантике. Кажется, что это цикл по элементам, а на самом деле — до первой дырки.
Цикл со счётчиком тоже до первой дырки, если граница массива определяется как #tbl. Чтобы ходило по дыркам, надо как-то определять максимальное значение массива.
источник

S

Snusmumriken in pro.lua
Плюс если массив  с дырками — используй pairs. Он пропустит дырки и пройдёт по всем не-nil элементам.
источник

T

The Dormouse in pro.lua
Snusmumriken
Цикл со счётчиком тоже до первой дырки, если граница массива определяется как #tbl. Чтобы ходило по дыркам, надо как-то определять максимальное значение массива.
Да, я про это написал.
источник