序列化可能会失败,并且创建的类对象包含__pairs
:
test = torch.class('test')
function test:__init()
self.data = {}
end
function test:__pairs(...)
return pairs(self.data, ...)
end
function test:get_data()
print(self.data)
end
a = test.new()
a.data = {"asdasd"}
b = torch.serialize(a)
c = torch.deserialize(b)
print(torch.typename(c))
print(c:get_data())
以下内容返回:
test
nil
答案 0 :(得分:0)
torch.serialization
后面的引擎位于File-class。 File:writeObject
我们的关键功能。对于上面的示例,Torch类的操作从line 201开始,其中包含:
elseif typeidx == TYPE_TORCH then
中标识
可以实现metatable函数write
,但在上面的示例中,问题是非torch metatable函数__pairs
应该是__pairs__
(请参阅torch.getmetatable
):
test = torch.class('test')
function test:__init()
self.data = {}
end
function test:__pairs__(...)
return pairs(self.data, ...)
end
function test:get_data()
print(self.data)
end
a = test.new()
a.data = {"asdasd"}
b = torch.serialize(a)
c = torch.deserialize(b)
print(torch.typename(c))
print(c:get_data())
这给出了预期的:
test
{
1 : "asdasd"
}