为什么我不能使用 Set:union() 而不是 Set.union?
我正在学习 Lua,我宁愿使用冒号 (:
) 作为方法。不幸的是,它并不是在所有地方都有效。请参阅我的代码:
Set= {} local mt= {} function Set:new(m) local set= {} setmetatable(set,mt) for a,b in pairs (m) do set[b]=true end return set end function Set.union(a,b) local res=Set:new ({}) for k in pairs (a) do res[k]=true end for k in pairs (b) do res[k]=true end return res end mt.__add=Set.union -- why Set:union() is not working here ? s1=Set:new {22,55,77} s2=Set:new {2,5,3} s3=s1+s2
如何在提到的地方使用 Set:union()
还是不能在这里使用?
I am learning Lua and I would rather use the colon (:
) for methods. Unfortunately, it's not working everywhere. See my code:
Set= {} local mt= {} function Set:new(m) local set= {} setmetatable(set,mt) for a,b in pairs (m) do set[b]=true end return set end function Set.union(a,b) local res=Set:new ({}) for k in pairs (a) do res[k]=true end for k in pairs (b) do res[k]=true end return res end mt.__add=Set.union -- why Set:union() is not working here ? s1=Set:new {22,55,77} s2=Set:new {2,5,3} s3=s1+s2
How can I use Set:union()
on the mentioned place or is it not possible to use here?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
因为冒号只是语法糖,仅用于定义和调用函数。正如您可能已经读过的那样,
obj:f()
相当于obj.f(obj)
,function A:f()
相当于函数 Af(self)
。这就是冒号的全部用途。在您的示例中,
Set:union
不属于上述两种用途中的任何一种。确实没有更多内容,但请随时询问:)Because the colon is syntactic sugar only for defining and calling a function. As you have probably read
obj:f()
is equivalent toobj.f(obj)
andfunction A:f()
is equivalent tofunction A.f(self)
. That's all colon is used for.In your example
Set:union
doesn't fall into any of the two uses above. There isn't really more into it, but feel free to ask :)