如何防止Lua返回表达式的最终值?

时间:2014-07-12 01:21:27

标签: lua

这是一个奇怪的问题,因为我不太确定如何提问,但这就是问题所在:

BeforeTime = os.clock()

function NewFunction( Name, Value )
         Name = function()
            return Value
         end
end

NewFunction( RunningTime, (os.clock()-BeforeTime) )

while true do
  print(RunningTime()) -- will always return same value, i want the updated
end

上面的示例并不完全是我的上下文,但它是解释我的问题的最简单方法。

我想我可以要求参数' Value'需要成为一种功能,但还有另一种方式吗?

2 个答案:

答案 0 :(得分:1)

NewFunction创建一个函数并将其分配给Name参数。但是,在Lua中,实际参数传递by value(如Java和C),形式参数实际上是局部变量。永远不会使用赋值,也不能在函数外部使用。

要使函数返回非空值列表,请使用return语句。

以下是计时器的类似功能:

local function CreateTimer()
    local BeforeTime = os.clock()
    return function() 
        return os.clock() - BeforeTime  
    end
end

你可以像这样使用它:

local RunningTime = CreateTimer()

while true do
    print(RunningTime())
end

答案 1 :(得分:0)

您的代码无法运行,因为NewFunction没有做您认为应该做的事情。

如果在循环之前添加下面的行,那么它可以正常工作。

RunningTime = function() return (os.clock()-BeforeTime) end