我想知道某个对象是否属于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类(如上所述),似乎无法将集合更改为compare_objects
。所以我的问题是:
SET
LINKED_SET
的选择由于对语义的误解而错了,我该怎么做才能基于对象比较获得唯一的项目集合,然后又能够基于对象比较再次对项目进行修剪 li>
答案 0 :(得分:1)
应该在创建容器之后立即设置比较标准,然后它可以正常工作。如果集合中已经有一些对象,则不清楚如果比较标准发生更改应如何处理。
例如,如果存在两个具有相同值(即相等)的不同对象A和B的集合{A,B},那么如果比较标准从compare_references
变为{ {1}}?显然,该集合现在应该只有一个对象,因为根据新设置,它不能容纳两个或更多相等的对象。这是否意味着应除去对象A而应保留对象B?还是应该以相反的顺序进行?您所指的前提条件消除了这种歧义。
解决方案是在容器中没有任何对象之前修改设置:
compare_objects