【发布时间】:2014-07-29 13:25:20
【问题描述】:
我想要一个动态变量名,并希望能够评估并获取它的值,并且想知道这是否可用。我想如何使用它的示例。
audio.play(eval("readAloudPage"..page_num)))
【问题讨论】:
我想要一个动态变量名,并希望能够评估并获取它的值,并且想知道这是否可用。我想如何使用它的示例。
audio.play(eval("readAloudPage"..page_num)))
【问题讨论】:
如果要查找全局变量的值,请尝试_G["readAloudPage"..page_num]。
或者定义
function eval(name)
return _G[name]
end
【讨论】:
动态变量名必须是表字段:名为_G 的全局表,或者如果您不想使用全局变量(通常是这种情况),则可以是您自己的表。示例:
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
如果你用_G 替换yourDynVars 表,唯一的区别是在最后一行你可以直接访问var:
_G["readAloudPage"..page_num] = ...
audio.play(_G["readAloudPage"..page_num])
print( readAloudPage2 ) -- not dynamic; prints nil unless page_num was 2, above
【讨论】:
Lua 与 eval(code) 最接近的等价物是 loadstring(code)()。
注意loadstring(code) 不会执行code,它会用它动态创建一个函数。使用loadstring(code)() 创建并运行它。
【讨论】:
code 类似于"return readAloudPage"..page_num
你能得到的最接近的是lhf使用_G["readAloudPage"..page_num]的解决方案。
Lua 提供loadstring 函数将字符串转换为可执行函数,但该函数在 Corona SDK 中被禁用(只能在调试环境中使用/访问)。
【讨论】: