1

我制作了一个 Spec Explorer 项目,其中包含一个列表作为系统变量。几乎在每条规则中,此列表都适用于获得正确的结果。但是当我探索我的项目时,我会得到重复的状态。如果我比较这些状态,我发现的唯一区别是:

_version: 25 System.Int32
_version: 23 System.Int32

在谷歌搜索为什么会发生这种情况后,我发现每次更改字符串时版本都会更改。所以即使版本 23 和 25 包含相同的字符串,版本号也会让 Spec Explorer 认为它们是不同的,所以它会产生 2 个状态。有没有什么办法解决这一问题?就像重置字符串一样,或者可能有一种方法可以强制 Spec Explorer 接受这一点。

4

1 回答 1

0

这是一个可能的根本原因的想法:

Set、Sequence 或 Map 等丰富的状态对象是不可变的。这意味着,如果您想添加一个元素,“添加”方法将返回一个具有更改内容的新对象。重要的是,这个返回的对象仍然被 Spec Explorer 检测为相同(但内容已更改)的实例。所以你应该总是重用这个返回的对象。您可以通过将更改的对象分配回程序模型的静态变量来做到这一点:

_version = _version.Add(15);

如果在您的程序中,现在使用“new”操作符在每次调用您的规则方法时创建一个完整的新对象,并且这个新对象被复制到您的程序模型的静态变量中,您将始终获得一个新实例和 Spec即使内容相同,Explorer 也会将它们检测为不同的实例。

_newversion = new Set<int>();  
...  
_version = _newversion;

希望这对您的情况有所帮助...

于 2015-03-18T07:58:53.143 回答