【问题标题】:append to function lua附加到函数lua
【发布时间】:2014-08-11 20:13:14
【问题描述】:

我想在程序运行时动态添加一个函数。

假设我有函数 Foo:

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

我想将 Foo() 更改为:

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

稍后在节目中。有没有办法做到这一点?

【问题讨论】:

    标签: function dynamic lua append


    【解决方案1】:

    就去做吧。您编写的代码工作正常。 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

    【讨论】:

    • @Blauhirn,并不严格,但它将 old 的定义保留在该块的本地。
    【解决方案2】:

    这是一个带有背景信息的补充答案。

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

    Lua 函数是值。 Lua 函数都是匿名的,与定义它们的语法无关。

    function f()
    --...
    end
    

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

    的替代品
    f = function()
    --...
    end
    

    每次执行函数定义时,都会产生一个新的函数值,然后将其用于任何关联的表达式或赋值。

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

    此外,就像其他值一样,函数值是垃圾回收的。因此,如果f 有一个函数值并且被分配了一个不同的值或者超出了范围(例如,如果它不是一个全局变量),那么当没有其他东西引用它时,之前的值将被垃圾回收。


    没有function f() end 的任何其他上下文,我们假设f 是一个全局变量。但情况不一定如此。如果f 是范围内的本地参数或参数,则将分配给f

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-02-05
      • 2015-02-10
      • 2015-02-18
      • 1970-01-01
      • 1970-01-01
      • 2013-11-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多