Smalltalk ReferenceStream新实例变量有问题吗?

时间:2013-04-01 09:18:30

标签: smalltalk pharo

在Pharo Smalltalk中我使用ReferenceStream来序列化对象列表 - 这是我正在序列化的对象的类定义:

Object subclass: #Task
instanceVariableNames: 'title notes list project dateNextAction dateCreated dateCompleted importance selected'
classVariableNames: 'Database'
poolDictionaries: ''
category: 'ToDo'

我正在使用此处描述的SMFileDatabase方法: http://book.seaside.st/book/advanced/persistency/image-based-persistency

这一直运行良好,不必为我的原型应用程序使用数据库。

问题,这就是问题:当我向person添加一个新的实例变量Task时,来自ReferenceStream的负载会中断:

Object subclass: #Task
instanceVariableNames: 'title notes list project person dateNextAction dateCreated dateCompleted importance selected'
classVariableNames: 'Database'
poolDictionaries: ''
category: 'ToDo'

似乎没有发现新变量,并将值加载到错误的插槽中,因此人员取值dateNextActiondateNextActiondateCreated等等。

我怎样才能阻止这种情况发生?

我通过将新变量放在列表的末尾来实现它,但我想按类型对变量进行分组。

3 个答案:

答案 0 :(得分:6)

不再支持ReferenceStream,并已在Pharo 2.0中删除。您应该使用写得很好,记录良好,经过良好测试且速度非常快的燃料。 http://rmod.lille.inria.fr/web/pier/software/Fuel

答案 1 :(得分:6)

SmartRefStream可以帮到你。引用文档:

  

普通的ReferenceStreams假设在写入和读取目标文件时,实例变量的名称和顺序完全相同。
  即使在实例变量已更改或整个类已重命名后,SmartRefStream也允许读取目标文件。

答案 2 :(得分:0)

想要完成本书中示例的人,请按照以下步骤操作:

<强> 1。回到过去并从https://gforge.inria.fr/frs/?group_id=1299

获取Pharo 1.4

向下滚动并查找One-Click Pharo 1.4并获取最新版本,如果版本较新,则为https://gforge.inria.fr/frs/download.php/file/31359/Pharo-1.4-14457-OneClick.zip

使用配置浏览器安装Seaside,您已完成。

1a上。或者使用在Pharo 1.3上运行的遗留开发预构建的Seaside,Scriptaculous,Magritte,Pier图像:http://www.seaside.st/distributions/Seaside-3.0.7-final.zip

我很幸运从这里使用Pharo VM:http://files.pharo.org/vm/pharo/20/mac/stable.zip

<强> 2。通过Monticello获取当前图像的代码然后&#34;返回&#34;进入旧图像。成功了!

PS。此处提供更多详情: FileDirectory and ReferenceStream Class equivalents in Pharo?