太升 2024-01-29 10:23 采纳率: 50%
浏览 4
已结题

Lua变量与库重名问题

在学习Lua中看到了这样的代码,很好奇为什么可以正确执行

string = "Lua Tutorial"
-- 查找字符串
print(string.find(string,"Tutorial"))
reversedString = string.reverse(string)
print("新字符串为",reversedString)

在这段代码中创建了全局变量string,和string函数库重名了,为什么还可以正确使用string.find函数呢?

  • 写回答

2条回答 默认 最新

  • 叫兽-郭老师 新星创作者: Java技术领域 2024-01-29 10:25
    关注

    在 Lua 中,函数和变量都是存在于自己的命名空间中的。当你使用“.”操作符来访问某个库或table内的函数时,Lua 解释器会首先在相应的库或table里寻找你指定的函数或变量,而不是在全局命名空间里(也就是_G表)寻找。
    在你的程序中,当你这样写:

    print(string.find(string,"Tutorial"))
    
    

    Lua 解释器会首先在内置的 string 库中寻找一个名为 find 的函数,然后应用这个函数到你提供的参数上。
    然后,当你写:

    string = "Lua Tutorial"
    
    

    Lua 解释器就会在全局命名空间里创建一个新的变量,并把 "Lua Tutorial" 赋值给这个变量。
    所以,尽管这两个变量名字都是 string,但它们存在于不同的命名空间中,并不会相互干扰。
    不过必须注意,这种命名方式很容易导致混淆,不推荐在实际的编程实践中使用。尽量避免使用内置库或函数名称作为你自己的变量名称。如果变量和内置库重名,虽然不会影响访问库内的函数,但是你将无法直接访问此库本身,除非你在改变变量之前存储一个库的引用。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 2月6日
  • 已采纳回答 1月29日
  • 创建了问题 1月29日