Estoy tratando de pasar el contexto a una expresión dinámica que evalúo cada iteración de un ciclo for. Entiendo que la cadena de carga solo evalúa dentro de un contexto global, lo que significa que las variables locales son inaccesibles. En mi caso, evito esta limitación convirtiendo un local en global para el propósito de la evaluación de cadenas. Aquí es lo que tengo:Lua: ¿pasa el contexto a la cadena de carga?
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)
Mi objetivo final (que no sea el dominio de Lua) es construir un motor XSLT como tentador en el que podía hacer algo como:
apply_templates{ match = each.age > 30}[[<parent-player>$each.player</parent-player>]]
apply_templates{ match = each.age > 30}[[<child-player>$each.player</child-player>]]
... Y generar diferentes salidas. Actualmente estoy atascado en mi medio halcón por encima de compartir un contexto local a través de un global. ¿Alguien aquí tiene una mejor idea de cómo haré lo que estoy intentando hacer?
Uso algo similar en la búsqueda de elementos XML de mi pobre hombre en mi [web data miner] (https://github.com/mkottman/wdm/blob/master/wdm.lua#L156). –
¡Eso funciona brillantemente! Gracias! :) – Cliff