lua中的typedef函数关键字

lua中的typedef函数关键字,lua,Lua,出于语法方面的原因,我想编写如下函数: on update() --do something end 而不是常规的: function update() --do something end 是否可以(实际上)将“function”关键字键入def或别名为“on”?否,这是不可能的,除非在加载程序之前处理Lua输入以将on替换为function 我建议考虑备选方案,如 on.update = function () -- do something end -- on

出于语法方面的原因,我想编写如下函数:

on update()
    --do something
end
而不是常规的:

function update()
    --do something
end

是否可以(实际上)将“function”关键字键入def或别名为“on”?

否,这是不可能的,除非在加载程序之前处理Lua输入以将
on
替换为
function

我建议考虑备选方案,如

on.update = function ()
    -- do something
end

-- on can simply be an alternative name
-- for the global environment
on = _G
或者将程序定义为字符串

-- Update functions is defined as a string, loaded later.
on.update = [[
    -- do something
]]

对于后者,您必须设置
\uu newindex
元方法,通过
加载
字符串并将结果函数设置为字段值,从字符串创建新函数。

不,这是不可能的,除非您在加载程序之前处理Lua输入,将
上的
替换为功能

我建议考虑备选方案,如

on.update = function ()
    -- do something
end

-- on can simply be an alternative name
-- for the global environment
on = _G
或者将程序定义为字符串

-- Update functions is defined as a string, loaded later.
on.update = [[
    -- do something
]]

对于后者,您必须设置
\uu newindex
元方法,通过
加载
字符串并将结果函数设置为字段值,从字符串创建新函数。

在llex.c中的末尾添加这些行并重新生成Lua:

  {
    TString *ts = luaS_new(L, "on");
    luaC_fix(L, obj2gco(ts));  /* reserved words are never collected */
    ts->extra = cast_byte(TK_FUNCTION+1-FIRST_RESERVED);  /* reserved word */
  }

在llex.c中的末尾添加以下行并重新生成Lua:

  {
    TString *ts = luaS_new(L, "on");
    luaC_fix(L, obj2gco(ts));  /* reserved words are never collected */
    ts->extra = cast_byte(TK_FUNCTION+1-FIRST_RESERVED);  /* reserved word */
  }

您可以更改Lua的源代码以接受“on”作为“function”的别名。这很容易。您还可以使用预处理您的Lua代码。如何在保留“function”关键字的同时安全地进行预处理?您可以更改Lua的源代码,以接受“on”作为“function”的别名。这很容易。您还可以使用预处理Lua代码。在保留“function”关键字的同时,如何安全地进行预处理?