Corona SDK或Lua是否有可用的“eval”函数?

我想要一个动态的变量名并且想要评估并获取它的值,想知道这是否可用。这是一个我想要使用它的例子。

audio.play(eval("readAloudPage"..page_num)))
点赞
用户156811
用户156811

Lua 中与 eval(code) 最相似的功能是 loadstring(code)()

需要注意的是 loadstring(code) 并不会执行 code,它只是动态地创建一个函数。使用 loadstring(code)() 来创建并运行该函数。

2014-06-09 02:37:22
用户107090
用户107090

如果要获取全局变量的值,则尝试使用 _G["readAloudPage"..page_num]

或者定义一个函数:

function eval(name)
   return _G[name]
end
2014-06-09 02:59:40
用户1442917
用户1442917

最接近的解决方案是使用 _G["readAloudPage"..page_num],这是 lhf 提供的方法。

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

2014-06-09 03:27:39
用户869951
用户869951

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

local yourDynVars = {}
yourDynVars["readAloudPage"..page_num] = ...
audio.play(yourDynVars["readAloudPage"..page_num])
print( yourDynVars.readAloudPage2 ) -- 不是动态的; 除非page_num是2,否则会打印nil

如果您用 _G 代替 yourDynVars 表格,唯一的区别在于您可以在最后一行直接访问该变量:

_G["readAloudPage"..page_num] = ...
audio.play(_G["readAloudPage"..page_num])
print( readAloudPage2 ) -- 不是动态的; 除非page_num是2,否则会打印nil
2014-06-09 04:29:56