【问题标题】:Does Corona SDK or Lua have an 'eval' function available?Corona SDK 或 Lua 是否有可用的“评估”功能?
【发布时间】:2014-07-29 13:25:20
【问题描述】:

我想要一个动态变量名,并希望能够评估并获取它的值,并且想知道这是否可用。我想如何使用它的示例。

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

【问题讨论】:

    标签: lua coronasdk


    【解决方案1】:

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

    或者定义

    function eval(name)
       return _G[name]
    end
    

    【讨论】:

      【解决方案2】:

      动态变量名必须是表字段:名为_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
      

      【讨论】:

        【解决方案3】:

        Lua 与 eval(code) 最接近的等价物是 loadstring(code)()

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

        【讨论】:

        • code 类似于"return readAloudPage"..page_num
        • 它被锁定在 Corona
        • @500 不再!
        【解决方案4】:

        你能得到的最接近的是lhf使用_G["readAloudPage"..page_num]的解决方案。

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

        【讨论】:

        • 是的,它会抛出一个错误 Corona Simulator[50857:507] 错误:loadstring() 不可用 b/c 解析器未加载。
        • 您无能为力。模拟器有命令行选项来启用 loadstring,但它只在模拟器中有效。您将无法在您的应用程序中使用它。
        • Corona SDK 现在在运行时支持 Lua 5.1 的 loadstring() 而不仅仅是在调试时。
        猜你喜欢
        • 1970-01-01
        • 2012-01-28
        • 2012-09-16
        • 2013-06-04
        • 2016-04-09
        • 2012-05-08
        • 2015-02-27
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多