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

Mat*_*s89 5 variables lua function global-variables

这是示例测试代码。

s="\\command{sample execution}"
u=string.gsub(s,"\\(%b{})",print)
Run Code Online (Sandbox Code Playgroud)

它工作正常,因为打印是全局功能。我定义函数 myprint 如下。

myprint = function(x,y)
  return print(x,y)
end
Run Code Online (Sandbox Code Playgroud)

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

Gre*_*een 5

你只需要写:

global_function_1 = function (arg)
    -- body
end
Run Code Online (Sandbox Code Playgroud)

或使用语法糖替代:

function global_function_2 (arg)
    -- body
end
Run Code Online (Sandbox Code Playgroud)

确保您执行此操作的部分没有具有选定名称的局部变量。例如,以下函数都不是全局的:

local bar
local function foo (arg)
    local zee
    function arg () end
    zee = function () end
    function bar () end
end
Run Code Online (Sandbox Code Playgroud)

请注意,我完全忽略了对表成员的分配,并忽略了_G和的存在_ENV,让我们就这样保留它。

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

local str = "abc"
local function fn (x) print(x) end
string.gsub(str, "%a", fn)
Run Code Online (Sandbox Code Playgroud)

输出:

a
b
c
Run Code Online (Sandbox Code Playgroud)