【发布时间】:2021-04-09 17:36:28
【问题描述】:
Lua 有一个语法糖,它允许实现 OOP 方法:运算符 : 当用作 foo:bar(biz) 时等效于 foo.bar(foo,biz)。但是,我注意到标准字符串库也以这种方式积极使用它:
local a = "a normal string"
local b = a:reverse() -- ????????
print(b)
-- outputs: gnirts lamron a
问题是:这究竟是如何实现的?自然,当您尝试假设它扩展为a.reverse(a) 时,它就会崩溃,因为a 是一个字符串,不可能包含键reverse,而且,该语句实际上等价于string.reverse(a)。我的预感是它实际上扩展为_G[type(a)].reverse(a),但你记得同样的事情发生在文件描述符上的io 库中......
【问题讨论】:
-
a.reverse(a)真的失败了吗?它适用于 tio.run:tio.run/…
标签: lua