【问题标题】:Const double initialised from Lua从 Lua 初始化的 const double
【发布时间】:2010-10-31 14:57:20
【问题描述】:

我有一个全局变量:

const double myvar = 5.1;

现在,我将其转换为从 Lua 读取这些值。

但是,我不能简单地这样做:

const double myvar = lua_tonumber(L,1);

由于 main() 必须先执行才能启动 Lua 解释器等,但如果我之后声明 myvar,它就不会是全局的。

有没有办法实现一个全局 const 变量,它从 Lua 中获取它的值?

【问题讨论】:

    标签: lua constants


    【解决方案1】:

    const 的微妙影响只有语言律师才能完全理解,但 const 变量 的基本思想是它的值是在编译时指定的。在有 Lua 解释器之前无法创建 Lua 值,这需要调用 lua_open(),直到运行时才能完成。所以,没有(安全、理智的)方法可以让 const 变量的值由 Lua 确定。

    【讨论】:

      【解决方案2】:

      你可以像这样违反常量:

      *(double*) & myvar = lua_tonumber(L,1);
      

      但这是一种非常糟糕的做法。

      编辑:您可以这样做,而不是声明 const 变量:

      static double myvar() {
       // todo: check if global L is init
       return lua_tonumber(L,1);
      }
      

      甚至这个:

      static double myvar() {
       return 1.15;
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-04-29
        • 2016-05-10
        • 2016-02-04
        • 2020-03-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-04-27
        相关资源
        最近更新 更多