Macos Can';t运行luarock,tonumber是一个nil值

Macos Can';t运行luarock,tonumber是一个nil值,macos,lua,luarocks,Macos,Lua,Luarocks,为了安装Luarock,我从下载了最新的(2.0.11)tar.gx文件。我打开包装,按照指示去做 $ ./configure Lua interpreter found: /usr/local/bin/lua... Lua version detected: 5.1 Looking for Lua... lua found in $PATH: /usr/local/bin Checking Lua includes... lua.h found in /usr/local/include

为了安装Luarock,我从下载了最新的(2.0.11)tar.gx文件。我打开包装,按照指示去做

$ ./configure 
Lua interpreter found: /usr/local/bin/lua...
Lua version detected: 5.1
Looking for Lua... 
lua found in $PATH: /usr/local/bin
Checking Lua includes... 
lua.h found in /usr/local/include/lua.h
curl found at /usr/bin
openssl found at /opt/local/bin
Configuring for system... 
Darwin
Configuring for architecture... 
i386
Writing configuration...

Installation prefix: /usr/local
LuaRocks configuration directory: /usr/local/etc/luarocks
Using Lua from: /usr/local

Done. You can now run 'make' to build.
然后,我运行了
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与其他所有操作一样工作正常。我不知道为什么这里会失败

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

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

这是Luarock中的一个bug,将在下一版本中修复

我修改的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")

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

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

这是Luarock中的一个bug,将在下一版本中修复

我修改的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")

这似乎奏效了。我不明白为什么这种改变会带来不同。
local tonumber=tonumber
有何帮助?
module
函数使全局变量“不可见”,但在调用
module
之前,将全局
tonumber
捕获到一个本地变量,使本地版本在模块中可见。这似乎有效。我不明白为什么这种改变会带来不同。
local tonumber=tonumber
有何帮助?
module
函数使全局变量“不可见”,但在调用
module
之前,将全局
tonumber
捕获到一个本地变量会使本地版本在模块中可见。