6

我正在学习 Lua,我宁愿使用冒号 ( :) 作为方法。不幸的是,它并非无处不在。查看我的代码:

设置= {}
本地 mt= {}
功能集:新(m)
    本地集= {}
    集元表(集,吨)
    对于 a,b 成对 (m) 做
        设置[b]=真
    结尾
    返回集
结尾

函数 Set.union(a,b)
    本地资源=设置:新({})
    for k in pair (a) do res[k]=true end
    对于 k 成对 (b) 做 res[k]=true end
    返回资源
结尾
mt.__add=Set.union - 为什么 Set:union() 在这里不起作用?

s1=设置:新 {22,55,77}
s2=设置:新 {2,5,3}
s3=s1+s2

我如何Set:union()在提到的地方使用或不能在这里使用?

4

1 回答 1

15

因为冒号只是用于定义和调用函数的语法糖。正如您可能已经阅读obj:f()的那样,等同于obj.f(obj)并且function A:f()等同于function A.f(self). 这就是冒号的全部用途。

在您的示例Set:union中,不属于上述两种用途中的任何一种。没有更多的内容,但请随时询问:)

于 2010-09-23T15:50:29.967 回答