【问题标题】:Smalltalk ReferenceStream has problems with new instance variables?Smalltalk ReferenceStream 有新实例变量的问题?
【发布时间】:2013-04-01 09:18:30
【问题描述】:

在 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'

它似乎没有发现新变量,并将值加载到错误的插槽中,所以人取了dateNextAction 的值,dateNextAction 取了dateCreated 等等。

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

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

【问题讨论】:

    标签: smalltalk pharo


    【解决方案1】:

    ReferenceStream 不再受支持,在 Pharo 2.0 中已被删除。您应该使用编写良好、文档完善、测试良好且速度非常快的 Fuel。 http://rmod.lille.inria.fr/web/pier/software/Fuel

    【讨论】:

    • ...您也可以在 Pharo 1.4 中安装它。所以是双赢的:)
    • 只需阅读 ReferenceStream 的代码就知道为什么要使用 Fuel :)
    【解决方案2】:

    SmartRefStream 应该可以帮助您。引用文档:

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

    【讨论】:

      【解决方案3】:

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

      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 将您的代码从当前图像中取出,然后“返回”到旧图像中。成功!

      PS. 更多详情请点击此处: FileDirectory and ReferenceStream Class equivalents in Pharo?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-05-09
        • 1970-01-01
        • 2012-04-04
        • 1970-01-01
        • 2010-10-01
        • 2019-07-17
        • 2011-06-10
        • 1970-01-01
        相关资源
        最近更新 更多