标签: lua-5.3

从5.3开始,Lua format.string不能将float格式化为十进制(%d)

我最近从Lua 5.2.3升级到5.3.1但我注意到string.format如果它尝试格式化float使用我的所有脚本执行开始失败%d

local anExampleString = string.format("Sample Number: %d",10.100000001) -- Fails on 5.3.1, works on 5.2.3
local aWorkingString  = string.format("Sample Number: %.0f",10.100000001) -- Works on 5.3.1
Run Code Online (Sandbox Code Playgroud)

这是设计的吗?我似乎无法在任何地方找到变更记录.

string string.format lua lua-5.3

7
推荐指数
1
解决办法
2015
查看次数

lua_Integer和lua_createtable(表大小限制)

在Lua 5.3中,C API中的表相关函数接收和返回lua_Integer.

void lua_rawgeti (lua_State *L, int idx, lua_Integer n);
void lua_rawseti (lua_State *L, int idx, lua_Integer n);
lua_Integer luaL_len (lua_State *L, int index);
Run Code Online (Sandbox Code Playgroud)

但是,lua_createtable仍然收到int.

void lua_createtable (lua_State *L, int narr, int nrec);
Run Code Online (Sandbox Code Playgroud)

在下面的示例函数中,源表的长度用于创建大小相同的副本.

static int copy_sequence(lua_State *L) {
   lua_Integer len, i;
   luaL_checktype(L, 1, LUA_TTABLE);
   len = luaL_len(L, 1);
   lua_createtable(L, (int)len, 0); /* conversion warning */
   for (i = 1; i <= len; i++) {
      lua_rawgeti(L, 1, i);
      lua_rawseti(L, -2, i);
   }
   return …
Run Code Online (Sandbox Code Playgroud)

c lua lua-api lua-5.3

6
推荐指数
1
解决办法
736
查看次数

在一定范围内执行加载的 Lua 文件

我使用 Lua 作为我的项目的配置格式。假设我有以下人为示例,我们将调用conf.lua

title = "Lorem Ipsum"
author = "John Doe"
date = "01 January 2000"
Run Code Online (Sandbox Code Playgroud)

现在,很简单,我当然可以像这样加载这个文件:

dofile("conf.lua")
Run Code Online (Sandbox Code Playgroud)

但是,问题在于这些定义是在全局命名空间中设置的,这是我不想要的。此外,这使得访问不同的变量作为一个整体变得困难(例如循环配置变量集)。一种解决方案是conf.lua像这样重写:

local conf = {
    title = "Lorem Ipsum",
    author = "John Doe",
    date = "01 January 2000"
}

return conf
Run Code Online (Sandbox Code Playgroud)

依次加载conf.lua以下代码:

local configuration = dofile("conf.lua")
Run Code Online (Sandbox Code Playgroud)

但是,由于我认为显而易见的原因,这并不理想。它要求我的用户跟踪逗号,必须写local,必须记住在最后返回表。如果有某种方法可以conf.lua使用某种自定义范围来执行,那将会是一件好事。

lua lua-5.3

2
推荐指数
1
解决办法
936
查看次数

标签 统计

lua ×3

lua-5.3 ×3

c ×1

lua-api ×1

string ×1

string.format ×1