gpt4 book ai didi

ruby 编码(marshal)序列化

转载 作者:数据小太阳 更新时间:2023-10-29 08:05:17 25 4
gpt4 key购买 nike

感谢您的宝贵时间!

我有这样的类(class)

class Vuser

def initialize (logfile_name, iteration_hash)
@logfile_name = logfile_name
@iteration_hash = iteration_hash
end

attr_accessor :logfile_name, :iteration_hash

def output_iteration_info ()
puts @logfile_name
puts @iteration_hash
end
end

并且会有一个数组来存储 Vuser 类的实例。假设数组的名称是 vuser_ary。

我想将此数组 ( vuser_ary ) 存储到二进制文件中,我认为这称为序列化。我用谷歌搜索,发现标准库中的 Marshal 可以做到这一点。下面是我如何根据 Internet 上的示例执行此操作的示例:

#serialization
File.open("some.file","wb") do |file|
Marshal.dump(vuser_ary,file)
end

#loading
vuser_ary = nil
File.open("some.file","rb") {|f| vuser_ary = Marshal.load(f)}

但是当我检查 some.file 的大小时。我发现它只有四个字节。然后我意识到存储在 some.file 中的数据可能是引用而不是 vuser_ary 的值。

那么我的问题是如何将 vuser_ary 的值存储到二进制文件中。我如何更改我的代码来实现这一目标?提前致谢!

顺便说一句:存储在 vuser_ary 中的值将是这样的:

RO_3.2_S4_CommericalRealEstate1_274.log

{1=>“失败”,2=>“失败”,3=>“通过”,4=>“通过”,5=>“失败”

RO_3.2_S4_CommericalRealEstate1_275.log

{11=>“失败”, 2=>“失败”, 3=>“失败”, 4=>“通过”, 5=>“失败”

RO_3.2_S4_CommericalRealEstate1_276.log

{1=>“失败”,2=>“失败”,3=>“通过”,4=>“通过”,5=>“失败”

RO_3.2_S4_CommericalRealEstate1_277.log

{1=>“失败”,2=>“失败”,3=>“通过”,4=>“通过”,5=>“失败”

RO_3.2_S4_CommericalRealEstate1_278.log

{1=>“失败”,2=>“失败”,3=>“通过”,4=>“通过”,5=>“失败”

RO_3.2_S4_CommericalRealEstate1_279.log

{1=>“失败”,2=>“失败”,3=>“通过”,4=>“通过”,5=>“失败”

RO_3.2_S4_CommericalRealEstate1_280.log

{1=>“失败”,2=>“失败”,3=>“失败”,4=>“通过”,5=>“失败”

最佳答案

四个字节?碰巧编码空数组 [] 在我的 Ruby 上产生了一个 4 字节的字符串:

> Marshal.dump([]).length
=> 4

当您尝试编码时,您确定 vuser_ary 不为空吗?

事实上,对象的“引用”和对象本身没有区别:Ruby 中没有指针,所以如果你有一个数组(并且它是非空的),那么它会被编码:

> Marshal.dump([1, 2, 3]).length
=> 10

好的措施:

> vuser_ary = [{1=>"Fail", 2=>"Fail", 3=>"Pass", 4=>"Pass", 5=>"Fail"}]
=> [{1=>"Fail", 2=>"Fail", 3=>"Pass", 4=>"Pass", 5=>"Fail"}]
> Marshal.dump(vuser_ary).length
=> 72

关于 ruby 编码(marshal)序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11412753/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com