无法运行luarocks,tonumber为nil值。

为了安装luarocks,我从这里下载了最新的(2.0.11)tar.gx文件。然后我解压缩文件并按照说明安装。

$ ./configure
找到Lua解释器:/usr/local/bin/lua...
检测到Lua版本为:5.1
查找Lua...
在$PATH中找到lua:/usr/local/bin
检查Lua包含文件...
在/usr/local/include/lua.h中找到lua.h
在/opt/local/bin中找到curl
在/opt/local/bin中找到openssl
正在配置系统...
Darwin
正在为体系结构配置...
i386
写入配置...

安装前缀:/usr/local
LuaRocks配置目录:/usr/local/etc/luarocks
使用Lua自:/usr/local

完成。你现在可以运行'make'来编译。

然后我运行了sudo make install,最后尝试安装一个软件包,但是当我尝试运行它时,我收到如下错误:

$ sudo luarocks install lpeg
/usr/local/bin/lua: /usr/local/share/lua/5.1//luarocks/cfg.lua:355: attempt to call global 'tonumber' (a nil value)
stack traceback:
    /usr/local/share/lua/5.1//luarocks/cfg.lua:355: in main chunk
    [C]: in function 'require'
    /usr/local/share/lua/5.1//luarocks/command_line.lua:6: in main chunk
    [C]: in function 'require'
    /usr/local/bin/luarocks:4: in main chunk
    [C]: ?

手动运行lua时,tonumber正常工作,其他所有功能也正常工作。 我不知道为什么在这里失败。

点赞
用户33252
用户33252

在 cfg.lua 的顶部,你需要添加:

local tonumber = tonumber

module 调用之前。你可以包含 tonumber 在类似的本地定义列表中的两行上。你可以在已安装的版本 /usr/local/share/lua/5.1//luarocks/cfg.lua 或源版本中进行这些更改,然后再次进行 make install

这是在 luarocks 中的一个错误,将在下一个版本中修复。

我修改过的 luarocks-2.0.11/src/luarocks/cfg.lua 包含:

local rawset, next, table, pairs, require, io, os, setmetatable, pcall, ipairs, package, type, assert, tonumber, _VERSION =
      rawset, next, table, pairs, require, io, os, setmetatable, pcall, ipairs, package, type, assert, tonumber, _VERSION

module("luarocks.cfg")
2012-10-08 16:48:43