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?方法。
class Data_More < Hash
Prefix = Marshal.dump(new)[0...-1]
def self.valid?(bin)
bin.start_with?(Prefix)
end
end
$data_more = Data_More.new
$data_more[:test] = "test"
s = Marshal.dump($data_more)
data = Marshal.load(s)
puts data.is_a?(Data_More)
puts data.is_a?(Hash)
puts data[:test]
puts Data_More.valid?(s)
复制代码
参考资料:
https://rpg.blue/thread-139590-1-1.html
欢迎光临 Project1 (https://rpg.blue/)
Powered by Discuz! X3.1