2
有什么办法来坚持红宝石绑定?我无法使用marshal.dump。 Doc说坚持红宝石绑定
如果要转储的对象包括绑定,过程或方法对象,类IO的实例或单例对象,则会引发TypeError。
我们需要在多个请求中使用相同的绑定。我如何序列化/ deserilaze红宝石绑定?
有什么办法来坚持红宝石绑定?我无法使用marshal.dump。 Doc说坚持红宝石绑定
如果要转储的对象包括绑定,过程或方法对象,类IO的实例或单例对象,则会引发TypeError。
我们需要在多个请求中使用相同的绑定。我如何序列化/ deserilaze红宝石绑定?
序列化绑定的想法在很多方面是不连贯的,因为绑定与运行时堆栈密切相关;当你反序列化绑定时,它是否应该重新创建堆栈?
这就是说,如果你只是想获得值了绑定的,你可以用像这样做:
class Binding
def values_for_serialization
data = {
locals: {},
self: eval('self',self)
}
eval("local_variables",self).each do |lvar|
data[:locals][lvar] = local_variable_get(lvar)
end
data
end
end
然后,您可以序列化使用Marshal#dump
,to_yaml
返回的结构,管他呢。
反序列将工作是这样的:
class Binding
def self.from_values(values)
bind = values[:self].instance_exec { binding }
values[:locals].each_pair do |lvar,value|
bind.local_variable_set(lvar,value)
end
bind
end
end
不过需要注意的是,虽然这会给你一个结合有那一个适当的自我对象,适当的局部变量,它不会真的被相同绑定。例如,如果您尝试使用它来序列化顶级脚本绑定,您可以;然后在另一个脚本中,您可以对其进行反序列化。但是当你这样做时,局部变量而不是在该脚本顶级绑定中可用,它们只会在你创建的绑定对象中可用。
一个简单的例子,所以那些给出答案可以展示他们的代码? –
_requests_是否表示HTTP请求? – Aetherus
*为什么*你想要?这听起来完全疯狂,甚至尝试。如果你想保存数据和绑定,你将不会将它序列化。序列化有一个隐含的承诺,即您可以在将来使用不同的进程或不同的机器对其进行反序列化,并将数据返回。那时绑定将完全消失。 – tadman