Lua中将函数分配给全局变量

这是样例测试代码。

s="\\command{sample execution}"
u=string.gsub(s,"\\(%b{})",print)

这个代码可以正常工作,因为print是全局函数。我定义了函数myprint如下所示。

myprint = function(x,y)
  return print(x,y)
end

现在命令u=string.gsub(s,"\\(%b{})",myprint)不工作了。这是因为myprint不是像print那样是全局变量。所以我想问的基本问题是:“如何将函数分配给全局变量?”。

点赞
用户4567755
用户4567755

你只需要写:

global_function_1 = function (arg)
    -- body
end

或者使用语法糖替代:

function global_function_2 (arg)
    -- body
end

确保你所做的部分没有带有选定名称的局部变量。例如,以下函数都不是全局的:

local bar
local function foo (arg)
    local zee
    function arg () end
    zee = function () end
    function bar () end
end

请注意,我完全忽略了分配给表成员和忽略了 _G_ENV 的存在,让我们继续保持这种方式。

我认为值得一提的是,string.gsub(或任何函数调用)并不关心函数(或任何参数)是本地还是其他:

local str = "abc"
local function fn (x) print(x) end
string.gsub(str, "%a", fn)

输出:

a
b
c
2020-03-25 14:41:35