хранение двух классов в структуре данных одновременно в EIFFEL

Я делаю клинику и мне нужно сделать объект, который хранит сразу два лекарства. Объект взаимодействия означает, что MEDICATION_1 взаимодействует с MEDICATION_2.

Однако следующий код неверен, поскольку он не соответствует общему параметру.

ОШИБКА: VICG: Фактический общий параметр не соответствует ограничению.

код:

interaction: HASH_TABLE[MEDICATION, MEDICATION] 

person geforce    schedule 25.02.2016    source источник


Ответы (1)


HASH_TABLE позволяет ассоциировать объекты одного типа с объектами другого (или того же) типа. Первый параметр HASH_TABLE — это значение, а второй — ключ. Следовательно, можно сохранить не более одного значения для одного и того же ключа. Если это соответствует вашим потребностям, тип ключей должен быть HASHABLE. Этот тип определяет функцию hash_code, которая вычисляет целочисленное значение для объекта. Все базовые типы и STRING являются HASHABLE, поэтому вы можете полагаться на существующие реализации для вычисления hash_code для MEDICATION объектов. Например, если лекарство имеет уникальное название, имеет смысл определить его следующим образом:

class MEDICATION inherit HASHABLE ... feature ...
   name: STRING
   ...
   hash_code: INTEGER
      do
         Result := name.hash_code
      end
end
person Alexander Kogtenkov    schedule 26.02.2016