lua – 运算符重载不起作用

lua – 运算符重载不起作用,第1张

概述在Lua中阅读Programming时,我尝试了本书中给出的运算符重载的例子 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) 在Lua中阅读Programming时,我尝试了本书中给出的运算符重载的例子

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 – 运算符重载不起作用所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1228104.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存