Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Smalltalk ReferenceStream在新实例变量方面存在问题?_Smalltalk_Pharo - Fatal编程技术网

Smalltalk ReferenceStream在新实例变量方面存在问题?

Smalltalk ReferenceStream在新实例变量方面存在问题?,smalltalk,pharo,Smalltalk,Pharo,在Pharo Smalltalk中,我使用ReferenceStream序列化对象列表--下面是我序列化的对象的类定义: Object subclass: #Task instanceVariableNames: 'title notes list project dateNextAction dateCreated dateCompleted importance selected' classVariableNames: 'Database' poolDictionaries: '' cat

在Pharo Smalltalk中,我使用ReferenceStream序列化对象列表--下面是我序列化的对象的类定义:

Object subclass: #Task
instanceVariableNames: 'title notes list project dateNextAction dateCreated dateCompleted importance selected'
classVariableNames: 'Database'
poolDictionaries: ''
category: 'ToDo'
我正在使用这里描述的
SMFileDatabase
方法:

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

然而,问题是:当我将一个新的实例变量
person
添加到
Task
时,ReferenceStream的加载中断:

Object subclass: #Task
instanceVariableNames: 'title notes list project person dateNextAction dateCreated dateCompleted importance selected'
classVariableNames: 'Database'
poolDictionaries: ''
category: 'ToDo'
它似乎没有发现新变量,并将值加载到错误的插槽中,因此person获取
dateNextAction
的值,
dateNextAction
获取
dateCreated
的值,依此类推

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


通过将新变量放在列表的末尾,我已经实现了这一功能,但我想按类型对变量进行分组。

不再支持ReferenceStream,并且已在Pharo 2.0中删除。你应该使用写得很好、有文件证明、经过良好测试且速度非常快的燃油

SmartRefStream
应该对您有所帮助。引用文件:

普通引用流假设在写入和读取对象文件时,实例变量的名称和顺序完全相同。
SmartRefStream允许在实例变量已更改或整个类已重命名后读取对象文件


想要完成本书中的示例,请遵循以下步骤:

1。时光倒流从以下地点获得Pharo 1.4:

向下滚动并查找一键式Pharo 1.4,如果有比以下版本更新的版本,则获取最新版本:

使用配置浏览器安装Seaside,您就完成了

1a。或者使用传统开发预先构建的海滨、Scriptaculous、Magritte、Pharo 1.3上运行的桥墩图像,请参见此处:

我很幸运在这里使用了Pharo虚拟机:

2。通过Monticello将代码从当前图像中取出,然后“返回”到旧图像中。成功

PS.更多详细信息请参见:

…您也可以在Pharo 1.4中安装它。双赢也是如此:)只要阅读ReferenceStream的代码就知道为什么要使用Fuel:)