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

lua中字符串实例方法的使用问题

这段代码为什么可以正确执行?

k = "ABC"
print(k.find(k, "B"))
print(string.find(k, "B"))

p = "QWER"
print(k.find(p, "Q"))
print(string.find(p, "Q"))

结果:

2    2
2    2
1    1
1    1

k.find()函数为什么可以正确处理p,理论上k.find()不是错误的使用方法吗?

  • 写回答

1条回答 默认 最新

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

    在 Lua 编程语言中,函数的语法是用冒号 : 来访问对象的方法,比如 k:find("B")。这种句法实际上就是一个语法糖,等价于调用 k.find(k, "B")。这是由于在 Lua 中,冒号 : 允许你调用一个函数,并将该函数处理为方法,并将左侧的表(此处是字符串对象)自动传递给函数作为第一个参数。
    在你的代码中,k.find(k, "B") 在底层实际上相当于 string.find(k, "B")。k.find 实际上引用的是全局的 string.find 方法,因此 k.find(k, "B") 相当于调用 string.find 并将字符串对象 'k' 作为第一个参数传递。
    这就是为什么 k.find(p, "Q") 可以正常运行的原因:这个表达式实质上等价于 string.find(p, "Q")。
    然而,尽管这样的操作是允许的,但在实际的编程实践中,你仍然应该使用 : 操作符来调用对象的方法,例如 k:find("B") 或者直接使用 string.find(k, "B"),这样的代码比较清晰,也更容易理解,而且可以避免一些不必要的混淆与错误。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

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