设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 1645|回复: 5
打印 上一主题 下一主题

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

[复制链接]

Lv4.逐梦者

梦石
0
星屑
9128
在线时间
463 小时
注册时间
2015-5-8
帖子
865
跳转到指定楼层
1
发表于 2022-5-23 21:46:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

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

大家好,我有个问题,

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

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

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

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

还请大家多多指教,多谢!

Lv5.捕梦者 (版主)

梦石
1
星屑
23963
在线时间
3338 小时
注册时间
2011-7-8
帖子
3925

开拓者

2
发表于 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 网络脚本 *
回复 支持 反对

使用道具 举报

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

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-5-15 07:14

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表