为什么LINKED_SET无法比较对象?

时间:2019-11-13 11:02:33

标签: eiffel

我想知道某个对象是否属于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。所以我的问题是:

  1. 无法将对象比较为SET
  2. 的语义是什么
  3. 如果我对LINKED_SET的选择由于对语义的误解而错了,我该怎么做才能基于对象比较获得唯一的项目集合,然后又能够基于对象比较再次对项目进行修剪 li>

1 个答案:

答案 0 :(得分:1)

应该在创建容器之后立即设置比较标准,然后它可以正常工作。如果集合中已经有一些对象,则不清楚如果比较标准发生更改应如何处理。

例如,如果存在两个具有相同值(即相等)的不同对象A和B的集合{A,B},那么如果比较标准从compare_references变为{ {1}}?显然,该集合现在应该只有一个对象,因为根据新设置,它不能容纳两个或更多相等的对象。这是否意味着应除去对象A而应保留对象B?还是应该以相反的顺序进行?您所指的前提条件消除了这种歧义。

解决方案是在容器中没有任何对象之前修改设置:

compare_objects