如何理解 rename{ old = "temp.lua", new = "temp1.lua" }?

我正在使用 Lua 的链接http://underpop.free.fr/l/lua/docs/programming-in-lua-first-edition.pdf,但对于 rename 函数感到困惑。我试着运行它,但结果只收到如下错误信息:

> 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 编程入门是好的教程,我还找到了一个参考菜单,但也不太喜欢。请问,有没有人能提供一个根据你的意见可靠的教程呢?

EDIT: 我再次尝试了以下代码:

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

这次运行成功了。

点赞
用户2858170
用户2858170
stdin:1: 尝试调用全局变量 'rename',但它是空值(nil)

这个错误信息告诉你问题出在哪。

它是由这一行代码引起的:

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

重要提示:rename是空值(nil)。因此,如果您调用它,Lua 不知道该如何处理。为了避免这个错误,您必须将 rename 定义为一个可调用变量。

让我再引用一下你不满意的教程。

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

因此,**我们定义 rename**,只使用一个参数,并从该参数中获取实际参数:

function rename (arg)
   return os.rename(arg.old, arg.new)
end
2019-11-11 07:23:43