我如何使用Torch的类系统创建自定义类?

我尝试遵循 torch 实用程序函数文档

我做了以下操作:

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

但是我遇到了以下错误:

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

我希望 __init() 函数通过 __call 元表机制来工作,但 Blah 甚至似乎没有元表:

th> getmetatable(Blah) == nil
true

也许文档已经过时了?但是 torch 看起来正在内部以这种方式创建许多类。

我刚刚更新到最新的 torch,所以我知道我的 torch 版本不太旧...

有什么想法吗?

点赞
用户117844
用户117844
do
 local Blah = torch.class('Blah')
 function Blah:__init() end
end

blah = Blah()

这段代码定义了一个类 Blah 并且创建了一个对象 blah。函数 Blah:__init() 是该类的构造函数。

2015-10-21 15:34:30
用户4592059
用户4592059

1. 您需要:

local Blah = torch.class('Blah')

2. 如果您想从相同的模块中调用class 'Blah',则需要使用:

do
end

词汇作用域。但是,如果您从另一个模块中调用它 - 正如我们大多数人使用类的方式 - 我们不需要使用do-end 词汇作用域

因此,如果您的模块的目的只是声明一个torch类型类,然后多次从其他模块中使用它,您只需要像第1节中一样声明为local,而不需要(但您可以)使用 do-end 词汇作用域

实际上,torch文档中指出:

-- for naming convenience

可能有点误导。

2017-07-15 23:22:56