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中的全局变量?”
你只需要写:
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)