簡體   English   中英

為什么 LINKED_SET 無法比較對象?

[英]Why is LINKED_SET unable to compare objects?

正如我想知道是否某些 object 進入LINKED_SET以在我的上下文中對其進行修剪,我無法將其與 object 進行比較,而不是其參考。

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 所以我的問題是:

  1. 無法將對象與SET進行比較的語義是什么
  2. 如果由於對LINKED_SET語義的誤解而選擇了錯誤,我應該如何處理基於 object 比較的唯一項目集合,然后再次基於 object 比較來修剪項目

比較標准應該在容器創建后立即設置,然后它可以正常工作。 如果集合中已經有一些對象,那么如果比較標准發生變化,應該對它們做什么就變得不清楚了。

例如,如果有一個集合 {A, B} 由兩個不同的對象 A 和 B 組成,它們具有相同的值,即相等,如果比較標准從compare_references變為compare_objects應該怎么辦? 顯然,該集合現在應該只有一個 object,因為根據新設置,它不能容納兩個或更多相等的對象。 這是否意味着,object A 應該被刪除而 B 應該被保留? 還是應該以相反的順序完成? 您所指的先決條件消除了這種歧義。

解決方法是在容器中有任何對象之前修改設置:

create my_set.make
my_set.compare_objects

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM