Project1

标题: 请教判断Marshal文件中含有数据$data_more的写法 [打印本页]

作者: taeckle    时间: 2022-5-23 21:46
标题: 请教判断Marshal文件中含有数据$data_more的写法
本帖最后由 taeckle 于 2022-5-23 21:48 编辑

大家好,我有个问题,

我做好了一个超大的哈希表$data_more,我想把这个$data_more保存起来,下次保证读档后其还能继续生效,

把这个数据写入是这么写的:    Marshal.dump($data_more, file)

读取这个数据是这样写的:    $data_more = Marshal.load(file)  

那请问下我要是想判断这个$data_more是否存在于Marshal文件file中又该怎么写呢?

还请大家多多指教,多谢!
作者: guoxiaomi    时间: 2022-5-23 23:47
本帖最后由 guoxiaomi 于 2022-5-24 00:20 编辑

做不到。变量名只是一个标识符,序列化不会存储变量名的信息,哈希表在序列化后再读出来只知道是一个哈希表,无法判断是不是你想要的那个。

最好的办法是你定义一个Data_More类继承自Hash,然后读出来判断一下类型是不是Data_More。

当然,如果你熟悉Marshal的格式的话,判断类Data_More是否在文件中存在,并不需要执行反序列化,比如这个valid?方法。
  1. class Data_More < Hash
  2.   Prefix = Marshal.dump(new)[0...-1]
  3.   def self.valid?(bin)
  4.     bin.start_with?(Prefix)
  5.   end
  6. end

  7. $data_more = Data_More.new
  8. $data_more[:test] = "test"

  9. s = Marshal.dump($data_more)
  10. data = Marshal.load(s)
  11. puts data.is_a?(Data_More)
  12. puts data.is_a?(Hash)
  13. puts data[:test]

  14. puts Data_More.valid?(s)
复制代码

参考资料:https://rpg.blue/thread-139590-1-1.html




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1