附加到函数lua

时间:2014-06-21 03:18:51

标签: function dynamic lua append

我有一个我希望在程序运行时动态添加的功能。

让我们说我有Foo功能:

function foo()
    Function1()
    Function2()
    Function3()
end

我希望将Foo()更改为:

function foo()
    Function1()
    Function2()
    Function3()
    Function4()
end

稍后在该计划中。有没有办法做到这一点?

2 个答案:

答案 0 :(得分:7)

做吧。你写的代码工作得很好。 Lua中的函数可以根据需要重新定义。

如果你不知道foo做了什么,你可以这样做:

do
  local old = foo
  foo = function () old() Function4() end
end

或者使用功能表可能更清楚:

local F={ Function1, Function2, Function3 }

function foo()
  for i=1,#F do F[i]() end
end

后来,做

F[#F+1]=Function4

并且您不需要重新定义foo

答案 1 :(得分:0)

这是背景资料的补充答案。

Lua标识符用于全局变量,局部变量,参数和表字段。他们拥有任何类型的价值。

Lua函数是值。无论用于定义它们的语法如何,Lua函数都是匿名的。

function f()
--...
end

是一个Lua语句,它编译为函数定义和变量赋值。

是替代

f = function()
--...
end

每次执行函数定义时,它都会生成一个新的函数值,然后在任何关联的表达式或赋值中使用它。

应该清楚的是,两个语句都不一定要创建一个新变量,也不要求它始终具有相同的值,也不要求它始终保持一个函数值。此外,创建的函数值不必总是仅由一个变量保持。 它可以像任何其他值一样被复制。

此外,就像其他值一样,函数值是垃圾回收的。因此,如果f具有函数值并且被赋予不同的值或超出范围(例如,如果它不是全局变量),则在没有其他任何内容引用时,前一个值将被垃圾收集。


function f() end没有任何其他上下文的情况下,我们假设f是一个全局变量。但事实并非如此。如果f是范围内的本地或参数,那就是将被分配到的f