如何删除 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')
我无法理解 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')