Sto provando a passare il contesto in un'espressione dinamica che valuto ogni iterazione di un ciclo for. Capisco che la stringa di caricamento valuti solo all'interno di un contesto globale che significa che le variabili locali sono inaccessibili. Nel mio caso aggiro questa limitazione convertendo un locale in un globale ai fini della valutazione della stringa. Ecco quello che ho:Lua: passare il contesto in loadstring?
require 'cosmo'
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" } }
values = { eval = function(args)
output = ''
condition = assert(loadstring('return ' .. args.condition))
for _, it in ipairs(model) do
each = it
if condition() then
output = output .. each.player .. ' age: ' .. each.age .. ' ' .. '\n'
end
end
return output
end }
template = "$eval{ condition = 'each.age < 30' }"
result = cosmo.fill(template, values)
print (result)
Il mio obiettivo finale (diverso da padroneggiare Lua) è quello di costruire fuori un XSLT come motore di allettante dove ho potuto fare qualcosa di simile:
apply_templates{ match = each.age > 30}[[<parent-player>$each.player</parent-player>]]
apply_templates{ match = each.age > 30}[[<child-player>$each.player</child-player>]]
... e generare differenti uscite. Attualmente sono bloccato sui miei metodi sopra il falco di condividere un contesto locale attraverso un globale. Qualcuno qui ha una visione migliore su come farei ciò che sto tentando di fare?
Io uso qualcosa di simile nella ricerca di elementi XML del mio povero uomo nel mio [minatore di dati web] (https://github.com/mkottman/wdm/blob/master/wdm.lua#L156). –
Che funziona brillantemente! Grazie! :) – Cliff