查看: 2552|回复: 5

[已经解决] 请教判断Marshal文件中含有数据$data_more的写法

[复制链接]
梦石
0
星屑
9160
在线时间
466 小时
注册时间
2015-5-8
回帖
704
发表于 2022-5-23 21:46:42 | 显示全部楼层 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有账号?注册会员

×
本帖最后由 taeckle 于 2022-5-23 21:48 编辑

大家好,我有个问题,

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

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

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

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

还请大家多多指教,多谢!
梦石
1
星屑
24088
在线时间
3339 小时
注册时间
2011-7-8
回帖
3862

开拓者

发表于 2022-5-23 23:47:52 | 显示全部楼层
本帖最后由 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

点评

看8-13行就行  发表于 2022-5-25 10:27
大神可以在这段代码后面写点注释吗?我们有好几个地方看不懂..你后面给的参考资料也没讲到呐..  发表于 2022-5-25 07:00
Prefix = Marshal.dump(Data_More.new)[0...-1]  发表于 2022-5-24 00:26
大神请问下你的这段代码第二行是神马意思啊?  发表于 2022-5-24 00:23

评分

参与人数 2星屑 +50 赞 +2 收起 理由
RyanBern + 50 + 1 认可答案
taeckle + 1 感谢!

查看全部评分

熟悉rgss和ruby,xp区版主~
正在填坑:《膜拜组传奇》讲述膜拜组和学霸们的故事。
已上steam:与TXBD合作的Reformers《变革者》
* 战斗调用公共事件 *
* RGSOS 网络脚本 *
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部