我试图关注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
也许文档已经过时了?但火炬似乎在内部以这种方式创造了大量的课程。
我刚刚更新到最新的火炬,所以我知道这不是我的火炬版本太旧...
思想?
答案 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
在这里有点误导,我想。