Marshal:最对象进行字节转换,并将字节反向转化为对象,应用在深层拷贝中,其中clone和dup只能做浅层拷贝,而marshal可以做深层拷贝。

#转换为了字节,dump
var = "demo"
str = Marshal.dump(var)

#字节转化为对象,load和restore
var = "demo"
str = Marshal.dump(var)
Marshal.load #"demo"
Marshal.restore #"demo"

应用:用Marshal实现深拷贝,即是对于对象的任何一层数组都进行了拷贝,即每一层数据都是指向不同的内存地址

a=["x", ["y", "z"]]
b=Marshal.load(Marshal.dump(a))

a[1][0]="t"
a #=>["x", ["t", "z"]]
#因为进行了深拷贝,a的二层数组值改变之后b并没有改变
b #=>["x", ["y", "z"]]

不能使用Marshal的对象

1.anonymous Class/Module.
2.objects which are related to system (ex: Dir, File::Stat, IO, File, Socket and so on)
3.an instance of MatchData, Data, Method, UnboundMethod, Proc, Thread, ThreadGroup, Continuation
4.objects which define singleton methods

results matching ""

    No results matching ""