序列化因自定义Torch类而失败

时间:2016-04-17 18:00:48

标签: torch

序列化可能会失败,并且创建的类对象包含__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

1 个答案:

答案 0 :(得分:0)

torch.serialization后面的引擎位于File-classFile:writeObject我们的关键功能。对于上面的示例,Torch类的操作从line 201开始,其中包含:

elseif typeidx == TYPE_TORCH then

该类型在File:isWritableObject

中标识

可以实现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"
}