如何避免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”需要是一个函数,但还有其他方法吗?

点赞
用户107090
用户107090

因为 NewFunction 没有做你认为它应该做的事情,所以你的代码不能运行。

如果在循环之前添加下面这行代码,它就可以正常工作。

RunningTime = function() return (os.clock()-BeforeTime) end
2014-07-12 02:20:36
用户2226988
用户2226988

NewFunction 函数创建了一个函数并将其分配给 Name 参数。但是,在 Lua 中,实际参数是按值传递的(类似于 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
2014-07-12 14:46:56