如何删除 Torch 中的 class 变量?

How to delete class variable in Torch?

我无法理解 Torch 中 class 变量的工作原理。

我做了以下事情:

mydata=torch.class('something')

我通过输入 who() 检查了用户变量,它显示:

== User Variables ==
[_RESULT]        = table - size: 0
[mydata]         = table - size: 0
[something]      = table - size: 0

我首先尝试通过

删除mydata
mydata=nil 

有效。 mydata 现在已释放,可以重新初始化为任何值。但是当我试图通过键入

来删除变量 something
soemthing=nil

即使变量 something 不再列在 who() 中,它似乎也不起作用。当我尝试时:

mydata2=torch.class('something')

弹出错误:

/data/torch/install/share/lua/5.1/torch/init.lua:65: something has been already assigned a factory
stack traceback:
        [C]: in function 'newmetatable'
        /data/torch/install/share/lua/5.1/torch/init.lua:65: in function 'class'
        [string "mydata2=torch.class('something')"]:1: in main chunk
        [C]: in function 'xpcall'
        /data/torch/install/share/lua/5.1/trepl/init.lua:648: in function 'repl'
        /data/torch/install/lib/luarocks/rocks/trepl/scm-1/bin/th:185: in main chunk
        [C]: at 0x00406670

谁能告诉我背后的原因?

torch.class() 将 class 元表存储在 lua 注册表中,请参阅 torch C 后端中的 http://www.lua.org/pil/27.3.1.html and the luaT_lua_newmetatable() 函数。

要取消注册现有的 class,必须从 lua-注册表中删除该条目。您可以在 debug.getregistry() 函数的帮助下从 lua 访问注册表。

从注册表中删除您的示例有效:

mydata = torch.class('something')
mydata = nil
soemthing = nil

-- remove the global registration:
debug.getregistry()['something'] = nil    

-- now it is possible to register the class again
mydata2 = torch.class('something')