2015-10-21 34 views
1

我試圖按照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元表機制的工作,但布拉赫沒有按」 t甚至似乎有一個metatable:

th> getmetatable(Blah) == nil 
true 

也許文檔已過時?但火炬似乎在內部以這種方式創造出大量的類。

我剛剛更新到最新的火炬,所以我知道這是不是我的火炬版本太舊...

的思考?

回答

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

blah = Blah() 
+0

Doh!所以火炬安裝符號,然後用'torch.class'的返回值覆蓋它。 –

0

您需要:

local Blah = torch.class('Blah')

2.你需要使用:

do 
end 

lexical scoping,如果你想打電話class 'Blah'相同模塊。 但是,如果您從其他模塊中調用它 - 正如我們大多數人所做的那樣,我們不需要使用do-endlexical scoping

所以,如果你的模塊的目的只是宣佈火炬型類,然後利用它與其他模塊的幾個時間,你只需要在部分如上聲明爲local和你不需要(但你cando-endlexical scoping

其實torch documentation備註:

-- for naming convenience 

是有點誤導這裏,我猜。