Я режу зубы с помощью Lua и пытаюсь реализовать некоторую логику обработки списка.Я не уверен, действительно ли я понимаю силу сопрограмм и анонимных функций, но я пытаюсь.Я знаю, как это работает в других языках сценариев, таких как Ruby / Groovy / Javascript, и я хочу сделать что-то столь же умное в Lua.Вот что я привел в качестве примера:
model = { { player = "Cliff", age = 35, gender = "male" }, { player = "Ally", age = 36, gender = "female" }, { player = "Jasmine", age = 13, gender = "female" }, { player = "Lauren", age = 6.5, gender = "female" } }
function allplayers()
return coroutine.create(function()
for idx, each in ipairs(model) do
coroutine.yield(idx, each)
end
end)
end
function handlePlayers(source)
local status, idx, each = coroutine.resume(source)
while each do
print(idx, each.player)
status, idx, each = coroutine.resume(source)
end
end
function having(source, predicate)
return coroutine.create(function()
local status, idx, each = coroutine.resume(source)
while each do
if predicate(each) then
coroutine.yield(idx, each)
end
status, idx, each = coroutine.resume(source)
end
end)
end
handlePlayers(having(allplayers(), function(each) return each.age < 30 end))
В идеале я хотел бы иметь возможность писать такой код:
allplayers(having(function(each) return each.age < 30 end))
или даже лучше:
allplayers(having({each.age < 30 }))
для получения того же результата, но я не могу понять, как и даже если это можно сделать.То, что я имею выше, кажется слишком избыточным со всеми итерациями, циклами и всем остальным.Есть ли лучший способ сделать это?(Мальчик, я скучаю по кодированию в Groovy, потому что всегда был отличный способ сделать что-то ...)