如何使用torch的类系统创建自定义类

时间:2015-10-21 15:03:16

标签: lua torch

我试图关注torch documentation for utility functions

我做了以下事情:

Blah = torch.class('Blah')
function Blah:__init(); end
blah = Blah()

但是我收到以下错误:

attempt to call global 'Blah' (a table value)

我期待__init()函数以某种方式通过__call metatable机制工作,但Blah似乎甚至没有metatable:

th> getmetatable(Blah) == nil
true

也许文档已经过时了?但火炬似乎在内部以这种方式创造了大量的课程。

我刚刚更新到最新的火炬,所以我知道这不是我的火炬版本太旧...

思想?

2 个答案:

答案 0 :(得分:5)

do
 local Blah = torch.class('Blah')
 function Blah:__init() end
end

blah = Blah()

答案 1 :(得分:0)

1。您需要:

local Blah = torch.class('Blah')

2。您需要使用:

do 
end 

lexical scoping,如果您想从相同模块中致电class 'Blah'。 但是如果你从其他模块中调用它 - 就像我们主要使用类一样 - 我们不需要使用do-end lexical scoping

因此,如果您的模块的目的只是声明一个火炬类型类,然后从其他模块中多次使用它,您只需要在 1。部分中声明为local,并且您不需要(但可以结束 lexical scoping

实际上torch documentation评论:

-- for naming convenience

在这里有点误导,我想。