Size: a a a

2019 December 03

T

The Dormouse in pro.lua
Тем не менее, например, в гайдлайне Logiceditor (есть на Гитхабе) ipairs запрещён.
источник

S

Snusmumriken in pro.lua
Карочи, просто не делаем массивов с дырками, и радуемся ))
Благо нам как раз выдали волшебный table.remove.
источник

S

Snusmumriken in pro.lua
The Dormouse
Тем не менее, например, в гайдлайне Logiceditor (есть на Гитхабе) ipairs запрещён.
Да, и я даже знаю почему, я немножко "работал" в logiceditor, а потом решил что гайдстайлы какие-то слишком жёсткие и убежал ))
источник

T

The Dormouse in pro.lua
Лол.
источник

S

Snusmumriken in pro.lua
Там вообще много всего запрещено, шаг влево-вправо — расстрел. Но тут есть одна фигнюшка: этот стайлгайд создан и используется в LogicEditor. Для их внутренней кухни он работает неплохо. Там (весьма) специфический набор библиотек, и стайлгайд вырос из него.
источник

ШТ

Шмель Тяжеловес in pro.lua
Snusmumriken
-- 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" }
%%
экранирование спецсимвола? А
%
выбран для шаблона чисто с потолка?
источник

S

Snusmumriken in pro.lua
Ды : )
Плюс "Привет, %username%", с типичных форумов, при ошибке заполнения поля. Считай что это пыховые шаблончики.
источник

ШТ

Шмель Тяжеловес in pro.lua
Мне вот вертикальная черта нравится
|
, но ее иногда проблемно набирать(
источник

S

Snusmumriken in pro.lua
Да заюзай что угодно, лишь бы это не использовалось в самом тексте.
источник

S

Snusmumriken in pro.lua
Но крайне желательно определить левую и правую границы вставляемого текста, а не только условный $width.
источник

S

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

А ещё, ты можешь зашаблонить сами кнопочки и вставить их в шаблон страницы:

local layout = {
 btn1 = tfill(btn, {...})
 btn2 = tfill(btn, {...})
}  

local page = [[
<html>
  <body>
    %btn1%
    %btn2%
  </body>
</html>]]

page = tfill(page, layout)
источник

M

Max in pro.lua
Snusmumriken
Карочи, просто не делаем массивов с дырками, и радуемся ))
Благо нам как раз выдали волшебный table.remove.
Кажется, что pairs -- меньшее зло, чем table.remove из середины
источник

S

Snusmumriken in pro.lua
Max
Кажется, что pairs -- меньшее зло, чем table.remove из середины
Из середины ещё норм, а вот когда этих table.remove из середины много — уже грустно, ибо куча сдвигов одного и того же.
Я как раз недавно писал волшебную функцию. Помечаем дырки чем хотим, а потом сносим всё за ~O(n).

function table_clear(tbl, v)
 local p = 1
 for i = 1, #tbl do
   tbl[p] = tbl[i]
   if tbl[i] ~= v then
     p = p + 1
   end
 end
 
 for i = p, #tbl do
   tbl[i] = nil
 end
 return tbl
end

local t = {'a', 0, 'c', 0, 0, 'd', 'e', 0, 'g', 0, 'f'}

print('Clear', render( table_clear(t, 0) ))
--> Clear   { "a", "c", "d", "e", "g", "f" }
источник

M

Max in pro.lua
Snusmumriken
Из середины ещё норм, а вот когда этих table.remove из середины много — уже грустно, ибо куча сдвигов одного и того же.
Я как раз недавно писал волшебную функцию. Помечаем дырки чем хотим, а потом сносим всё за ~O(n).

function table_clear(tbl, v)
 local p = 1
 for i = 1, #tbl do
   tbl[p] = tbl[i]
   if tbl[i] ~= v then
     p = p + 1
   end
 end
 
 for i = p, #tbl do
   tbl[i] = nil
 end
 return tbl
end

local t = {'a', 0, 'c', 0, 0, 'd', 'e', 0, 'g', 0, 'f'}

print('Clear', render( table_clear(t, 0) ))
--> Clear   { "a", "c", "d", "e", "g", "f" }
Опять хороший пример кода, на котором jit может дать замедление по сравнению с интерпретатором (если в массиве будут разнородные данные)
источник

S

Snusmumriken in pro.lua
А чаво, разнотипные сравнения не jit'уются?
источник

M

Max in pro.lua
Snusmumriken
А чаво, разнотипные сравнения не jit'уются?
Присваивание. Для каждой пары типов будет создана своя трасса (как минимум). И jit будет скакать по ним, делая до ветвлений ненужную работу, поверки etc
источник

S

Snusmumriken in pro.lua
Ну дык это на любом ветвлении в принципе, не? Трасса это просто набор инструкций сквозь все функции и ветвления. Одно условие уже добавляет новую ветвь.
источник

M

Max in pro.lua
Если не использовать luavela с правильными опциями, разумеется!)))
источник

M

Max in pro.lua
Snusmumriken
Ну дык это на любом ветвлении в принципе, не? Трасса это просто набор инструкций сквозь все функции и ветвления. Одно условие уже добавляет новую ветвь.
Проблема тут, что 1) это не считывается в коде как ветвление 2) таких ветвлений потенциально очень много
источник

M

Max in pro.lua
Но в бенчмарках, разумеется, всё очень быстро
источник