Size: a a a

2020 June 10

S

Snusmumriken in pro.lua
Arslan Yulbirdin
Ку всем, у меня тут вопрос: как реализуются итераторы в lua? Никогда с ними не связывался, но именно сейчас пришлось столкнуться...
Кароч, есть два вида итераторов.

Основная концепция — итератор как функция, возвращающая другую функцию, которая принимает итерируемый объект и первое значение, которое она же вернула в прошлый раз.
источник

S

Snusmumriken in pro.lua
Простой вариант итератора — на замыканиях.

function ipairs(tbl)
 local i = 0
 return function()
   i = i + 1
   if not tbl[i] then return nil end
   return i, tbl[i]
 end
end
источник

S

Snusmumriken in pro.lua
Сложный вариант итератора — на возвращаемых значениях.

local function _ipairs(tbl, i)
 i = i + 1
 if not tbl[i] then return end
 return i, tbl[i]
end

function ipairs(tbl)
 return _ipairs(tbl, 0)
end
источник

AY

Arslan Yulbirdin in pro.lua
Snusmumriken
Простой вариант итератора — на замыканиях.

function ipairs(tbl)
 local i = 0
 return function()
   i = i + 1
   if not tbl[i] then return nil end
   return i, tbl[i]
 end
end
А как используется tbl в новой функции? Она типа статичная становится?
источник

S

Snusmumriken in pro.lua
Ща вспомню и пофиксю последний пример
источник

S

Snusmumriken in pro.lua
Arslan Yulbirdin
А как используется tbl в новой функции? Она типа статичная становится?
Типа видишь tbl в замыкании от родительской функции? Вот её и использует.
источник

S

Snusmumriken in pro.lua
То что ты определил как статическое — называется замыкание. Функция, использующая какие-то локальные переменные вне себя, это замыкание.
источник

AY

Arslan Yulbirdin in pro.lua
Сложна, переварю завтра
источник

зк

захар который... in pro.lua
Привет, Мир!

Подскажите пожалуйста, вот есть переменная «TRGT», в которой хранится адрес, и есть вункция, которая дёргает команду из программы, передавая ей переменную с адресом:

local TRGT = Params[1];
DC.ExecuteCommand("cm_ChangeDir", TRGT);

но адрес содержит пробелы.  Как сказать, что адрес должен быть в кавычках?
источник

зк

захар который... in pro.lua
иначе пробелы удаляются и адрес обрабатывается некорректно
источник

S

Snusmumriken in pro.lua
local TRGT = '"' .. Params[1] .. '"'
источник

зк

захар который... in pro.lua
Snusmumriken
local TRGT = '"' .. Params[1] .. '"'
Спасибо, добрый человек!   🙏
Работает! ⚡️🌈✨🔥🌟💥
источник

S

Snusmumriken in pro.lua
Просто вручную добавляем кавычки же.
источник

зк

захар который... in pro.lua
Ага, да я в синтаксис луа вообще не шарю.  Понадобилось макрос написать маленький, который интуитивно по аналогии составил
источник

S

Snusmumriken in pro.lua
А, тады хорошо : )
источник

S

Snusmumriken in pro.lua
Arslan Yulbirdin
Сложна, переварю завтра
Кароч, вот полный мануал по итераторам
источник

f

fgntfg in pro.lua
Snusmumriken
Кароч, вот полный мануал по итераторам
next где?
источник

S

Snusmumriken in pro.lua
Никакого next.
источник

f

fgntfg in pro.lua
почему?
источник

S

Snusmumriken in pro.lua
Потому что не про next речь.
источник