Set = {}mt = {}mt.__add = Set.union--create a new set with the values of the given Listfunction Set.new (l) local set = {} setMetatable (set,mt) for _,v in ipairs (l) do set [v] = true end return setend function Set.union (a,b) local result = Set.new {} for k in pairs (a) do result [k] = true end for k in pairs (b) do result [k] = true end return resultendfunction Set.intersection (a,b) local result = Set.new {} for k in pairs (a) do result [k] = b[k] end return resultendfunction Set.tostring (set) local l = {} for e in pairs (set) do l[#l + 1] = e end return "{" .. table.concat (l,",") .. "}"end function Set.print (s) print (Set.tostring (s))end s1 = Set.new {10,20,30,50}s2 = Set.new {30,1}Set.print (s1)Set.print (s2)s3 = s1 + s2Set.print (s3)
但是对于windows的最新lua我收到以下错误
lua: C:\Meta.lua:47: attempt to perform arithmetic on global 's1' (a table value)stack traceback: C:\Meta.lua:47: in main chunk [C]: ?{30,10,50}{1,30}解决方法 你过早地做这个任务:
mt.__add = Set.union
因为Set.union尚未初始化.
将其移至Set.union下方,它将起作用.
出于同样的原因,如果你指定mt .__ mul,那么它应该低于Set.intersection
总结以上是内存溢出为你收集整理的lua – 运算符重载不起作用全部内容,希望文章能够帮你解决lua – 运算符重载不起作用所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)