1、[metatable] torch.class(name, [parentName], [module])
在torch里面,class就是一个拥有metatable的table
1)如果module没有提供,name也不含有点号,也即不是package.className的形式,那么class就会被定义在global environment里面,而如果是package.className,新定义的类就会被包含在package里面
2)如果module提供了,那么这个class就会在module里面,以键为className的形式存在
传建一个新的对象name()就可以,最后返回的metatable里面承载了这个类中所有的方法
最重要的是,在调用torch.class的时候会调用torch.newmetatable()这个函数,创建一个lua table,然后在这个table上面建立metatable,如果metatable里面有lua_init()函数的话,就回去调用这个函数!!当然一般都是会写__init函数的。
2、torch.newmetatable(name, parentName, constructor)
注册一个名字是name的新的metatable
如果parentName不为空并且是一个有效的torch类型,那么把parent对应的metatable设置为新的metatable的metatable
如果constructor不是空的,并且是有效的,那么就把新的metatable加入到constructor对应的模块中
3、[table] torch.getmetatable(string)
获得由string指定的torch class所对应的metatable,如果string所指定的class不存在,那么就返回nil
for k,v in pairs(torch.getmetatable('torch.FloatTensor')) do print(k,v) end
会看到torch.FloatTensor这个类的所有的meta方法
4、[object] torch.setmetatable(table, classname)
把table所对应的metatable设置成classname所指的metatable
以上便是torch的class构建使用最重要的四个函数,其他的参考官网