Corona SDK或Lua是否具有“评估”功能?功能可用?

时间:2014-06-09 02:28:19

标签: lua corona

我想有一个动态变量名称,并希望能够eval并获取它的值,并想知道这是否可用。关于我如何使用它的示例。

audio.play(eval("readAloudPage"..page_num)))

4 个答案:

答案 0 :(得分:2)

如果要求全局变量的值,请尝试_G["readAloudPage"..page_num]

或定义

function eval(name)
   return _G[name]
end

答案 1 :(得分:2)

动态变量名必须是表字段:名为_G的globals表,或者如果您不想使用全局变量(通常是这种情况),则为您自己的表。示例:

local yourDynVars = {}
yourDynVars["readAloudPage"..page_num] = ...
audio.play(yourDynVars["readAloudPage"..page_num])
print( yourDynVars.readAloudPage2 ) -- not dynamic; prints nil unless page_num was 2, above

如果您将yourDynVars表替换为_G,唯一的区别是在最后一行中您可以直接访问var:

_G["readAloudPage"..page_num] = ...
audio.play(_G["readAloudPage"..page_num])
print( readAloudPage2 ) -- not dynamic; prints nil unless page_num was 2, above

答案 2 :(得分:1)

最接近eval(code)的Lua将是loadstring(code)()

注意loadstring(code)不执行code,它会动态创建一个函数。使用loadstring(code)()创建并运行它。

答案 3 :(得分:1)

您可以获得的最接近的解决方案是使用_G["readAloudPage"..page_num]

Lua提供loadstring函数将字符串转换为可执行函数,但在Corona SDK中禁用此功能(并且只能在调试环境中使用/访问)。