关于lua中内置的class()函数无法以函数为父类的疑问

之前一个项目使用的3.3版本的,在项目中一个类使用了class()函数,并用一个创建函数作为父类,但是更新到3.4后出现问题了,该类的成员函数找不到了,举例最简单的例子说明:
ClassA = class(“ClassA”)

function ClassA:create()
return ClassA.new()
end

function ClassA:test1()
print(“A, test1”)
end

function ClassA:test2()
print(“A, test2”)
end

ClassB = class(“ClassB”, function() return ClassA:create() end)

function ClassB:create()
return ClassB.new()
end

function ClassB:test3()
print(“B, test3”)
end

function ClassB:test4()
print(“B, test4”)
end
在main()里使用如下:
local testB = ClassB:create()
testB:test3()
这时会提示test3为nil。但是调用test1()和test2()函数没有问题

看了class()函数源码,仔细分析和研究,感觉其中有段代码有点问题:
local setmetatableindex_
setmetatableindex_ = function(t, index)
if type(t) == “userdata” then
local peer = tolua.getpeer(t)
if not peer then
peer = {}
tolua.setpeer(t, peer)
end
setmetatableindex_(peer, index)
else
local mt = getmetatable(t)
if not mt then mt = {} end
if not mt.__index then
mt._index = index
setmetatable(t, mt)
elseif mt.index ~= index then
setmetatableindex
(mt, index) --感觉这一句有问题
end
end
end
setmetatableindex = setmetatableindex

在注释行的递归调用,感觉参数不该传mt,就修改了下:
setmetatableindex
(mt.__index, index)
测试发现问题解决了,其他几种继承也没有问题。
就是不知道这样修改会不会有其他问题,就发帖问下,特别希望官方技术人员能回复下,因为项目中很多用地方用到了class()。

mark,关注:2:

:2:来人啊啊啊啊