为什么 LINKED_SET 无法比较对象?
Why is LINKED_SET unable to compare objects?
因为我想知道某个对象是否进入 LINKED_SET
以在我的上下文中修剪它,所以我无法将它作为一个对象而不是它的引用进行比较。
changeable_comparison_criterion: BOOLEAN
-- May `object_comparison' be changed?
-- (Answer: only if set empty; otherwise insertions might
-- introduce duplicates, destroying the set property.)
do
Result := is_empty
ensure then
only_on_empty: Result = is_empty
end
进入SET class(如上)似乎无法将集合更改为compare_objects
。所以我的问题是:
- 无法将对象比较成
SET
的语义是什么
- 如果我对
LINKED_SET
的选择是错误的,因为误解了它的语义,我应该怎么做才能拥有一个基于对象比较的唯一项目集合,然后能够再次基于对象比较再次修剪项目
比较标准应该在创建容器后立即设置,这样就没有问题了。如果集合中已经有一些对象,如果比较标准发生变化,就不清楚应该对它们做什么。
例如,如果有两个不同的对象 A 和 B 的集合 {A, B},它们具有相同的值,即相等,如果比较标准从 compare_references
改变,应该怎么做到 compare_objects
?显然,集合现在应该只有一个对象,因为根据新的设置,它不能容纳两个或更多相同的对象。这是否意味着应该删除对象 A 而应该保留 B?还是应该按相反的顺序进行?您所指的先决条件消除了这种歧义。
解决方案是在容器中没有任何对象之前修改设置:
create my_set.make
my_set.compare_objects
因为我想知道某个对象是否进入 LINKED_SET
以在我的上下文中修剪它,所以我无法将它作为一个对象而不是它的引用进行比较。
changeable_comparison_criterion: BOOLEAN
-- May `object_comparison' be changed?
-- (Answer: only if set empty; otherwise insertions might
-- introduce duplicates, destroying the set property.)
do
Result := is_empty
ensure then
only_on_empty: Result = is_empty
end
进入SET class(如上)似乎无法将集合更改为compare_objects
。所以我的问题是:
- 无法将对象比较成
SET
的语义是什么
- 如果我对
LINKED_SET
的选择是错误的,因为误解了它的语义,我应该怎么做才能拥有一个基于对象比较的唯一项目集合,然后能够再次基于对象比较再次修剪项目
比较标准应该在创建容器后立即设置,这样就没有问题了。如果集合中已经有一些对象,如果比较标准发生变化,就不清楚应该对它们做什么。
例如,如果有两个不同的对象 A 和 B 的集合 {A, B},它们具有相同的值,即相等,如果比较标准从 compare_references
改变,应该怎么做到 compare_objects
?显然,集合现在应该只有一个对象,因为根据新的设置,它不能容纳两个或更多相同的对象。这是否意味着应该删除对象 A 而应该保留 B?还是应该按相反的顺序进行?您所指的先决条件消除了这种歧义。
解决方案是在容器中没有任何对象之前修改设置:
create my_set.make
my_set.compare_objects