Присвоение функции глобальной переменной в Lua - PullRequest
2 голосов
/ 25 марта 2020

Это пример тестового кода.

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

Он отлично работает, так как печать является глобальной функцией. Я определил функцию myprint следующим образом.

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

Теперь команда u=string.gsub(s,"\\(%b{})",myprint) не работает. Это потому, что myprint не является глобальной переменной, как print. Итак, базовый c вопрос, который я хочу задать, это «Как назначить функцию глобальной переменной в Lua?»

1 Ответ

2 голосов
/ 25 марта 2020

Вам просто нужно написать:

global_function_1 = function (arg)
    -- body
end

или использовать альтернативу сахара syntacti c:

function global_function_2 (arg)
    -- body
end

Убедитесь, что та часть, в которой вы делаете, не соответствует иметь локальную переменную с выбранным именем. Например, none из следующих функций являются глобальными:

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
...