Поиск объекта в HASH_TABLE с использованием функции элемента на EIFFEL

У меня проблема со сравнением двух объектов в HASH_TABLE.

PERSON — это класс с такими атрибутами, как имя, день рождения, статус отношений, имя супруга, идентификатор супруга. Итак, в основном состоит из кода атрибутов:

list: HASH_TABLE[PERSON, INTEGER_64]

put(id1, id2: INTEGER_64)
local
   p1, p2: PERSON
do
   p1 := model.list.at(id)
      -- or 
   p1 := model.list.search(id)
   p1 := model.list.found_item -- same error as below
end

ошибка: Источник назначения несовместим с целью.

ИСПОЛЬЗУЕМЫЕ ХАРАКТЕРИСТИКИ ВОЗВРАТА "РАЗЪЕМНАЯ G"

Я думаю, что я должен сделать «если прикреплен», чтобы гарантировать, что функция элемента возвращает правильный тип объекта, а затем назначить? Я не совсем уверен, как бросить объект, хотя.

Ошибка возникает при вызове вышеуказанной функции

Причина, по которой мне нужны эти функции, заключается в том, что я могу легче сортировать


person geforce    schedule 08.02.2016    source источник
comment
Компилятор обычно дает некоторую информацию о позиции ошибки (с текстовым контекстом в версии командной строки и возможностью двойного щелчка и перехода к ошибке в IDE). В фрагменте, который вы показываете, нет заданий, поэтому трудно догадаться, что не так. Можете ли вы показать контекст ошибки? Мне кажется, вам нужно показать функцию item.   -  person Alexander Kogtenkov    schedule 08.02.2016
comment
элемент (ключ k) возвращает ЧЕЛОВЕКА с идентификатором K, где я могу взять имя атрибута этого ЧЕЛОВЕКА   -  person geforce    schedule 08.02.2016
comment
Я также отредактировал, чтобы сделать его более простым для понимания   -  person geforce    schedule 08.02.2016


Ответы (1)


Функции возвращают detachable G, поскольку возможно, что ни один элемент не найден. Поэтому вам нужно использовать объектные тесты, например.

if
   attached model.list [id1] as p1 and then
   attached model.list [id2] as p2
then
   ... -- use p1 and p2
end
person Alexander Kogtenkov    schedule 08.02.2016
comment
Вам не хватает части model.list.item(id1), но я все равно ее уже получил - person geforce; 08.02.2016
comment
@GeForce, model.list [id1] - это псевдоним для model.list.item (id1), поэтому оба они по сути одинаковы, если используется текущая версия базовой библиотеки. - person Alexander Kogtenkov; 08.02.2016