【问题标题】:Assigning function to Global Variable in Lua在 Lua 中将函数分配给全局变量
【发布时间】:2020-07-06 02:08:05
【问题描述】:

这是示例测试代码。

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 那样是全局变量。所以我想问的基本问题是“如何在 Lua 中将函数分配给全局变量?”

【问题讨论】:

  • 示例不起作用。模式 "\\(%b{})"s 中的任何内容都不匹配。 "\\%a+(%b{})" 匹配。之后,使用提供的代码一切都很好。

标签: function variables lua global-variables


【解决方案1】:

你只需要写:

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

【讨论】:

  • 谢谢。我弄错了。我在 string.gsub 之后定义函数。它需要在调用 string.gsub 之前定义。
猜你喜欢
  • 2021-02-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-21
  • 1970-01-01
  • 2016-06-25
  • 2017-06-25
  • 1970-01-01
相关资源
最近更新 更多