【发布时间】:2012-02-13 22:25:21
【问题描述】:
我试图将上下文传递到一个动态表达式中,我会评估 for 循环的每次迭代。我知道加载字符串仅在全局上下文中评估,这意味着局部变量是不可访问的。在我的情况下,我通过将本地转换为全局来解决此限制以进行字符串评估。这是我所拥有的:
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)
我的最终目标(除了掌握 Lua)是构建一个类似于 XSLT 的诱人引擎,我可以在其中执行以下操作:
apply_templates{ match = each.age > 30}[[<parent-player>$each.player</parent-player>]]
apply_templates{ match = each.age > 30}[[<child-player>$each.player</child-player>]]
...并生成不同的输出。目前,我坚持通过全球共享本地环境的上述鹰派手段。这里有没有人对我将如何去做我想做的事情有更好的了解?
【问题讨论】:
标签: templates lua template-engine