如何理解重命名{旧=“ temp.lua”,新=“ temp1.lua”}?

时间:2019-11-10 14:45:38

标签: lua

我正在使用这个lua链接:http://underpop.free.fr/l/lua/docs/programming-in-lua-first-edition.pdf,并对重命名功能感到困惑。我尝试了一下,但只收到如下错误消息。

> rename{old = "temp.lua", new = "temp1.lua"}
stdin:1: attempt to call global 'rename' (a nil value)
stack traceback:
    stdin:1: in main chunk
    [C]: in ?
> os.rename{old = "temp.lua", new = "temp1.lua"}
stdin:1: bad argument #1 to 'rename' (string expected, got table)
stack traceback:
    [C]: in function 'rename'
    stdin:1: in main chunk
    [C]: in ?

此外,我正在学习Lua,因为我正在阅读一段用Lua编写的代码。我认为上面提供的链接(在lua第一版中进行编程)不是一个很好的教程。我还找到了参考菜单,但也不太喜欢。有人可以根据您的意见提供一个很好的教程吗?

编辑:我再次尝试了以下代码:

> function rename(arg)
>>   return os.rename(arg.old, arg.new)
>> end
> 
> rename{old = "temp.lua", new = "temp1.lua"}

这一次有效。

1 个答案:

答案 0 :(得分:2)

stdin:1: attempt to call global 'rename' (a nil value)

此错误消息告诉您确切的问题是什么。

这是由于以下原因引起的:

rename{old = "temp.lua", new = "temp1.lua"}

rename是一个零值。因此,Lua不知道该怎么办。为了避免此错误,您必须将重命名定义为可调用变量,例如。

让我只引用您认为不好的教程。

rename{old="temp.lua", new="temp1.lua"}
     

因此,我们仅使用一个参数定义重命名,并获得   该参数的实际参数:

function rename (arg)
   return os.rename(arg.old, arg.new)
end