Эйфель: методы преобразования работают в случае аргументов вызова агента? - PullRequest
0 голосов
/ 20 ноября 2018

Я вызываю процедуру с аргументом, который является целым_64.Я реализовал класс WATT, который может создать его из INTEGER_64, и кажется, что выполнение останавливается, когда я достиг этой точки, где я ошибаюсь?

Catcall detected for argument#1 args ': ожидается TUPLE [! WATT], но получен TUPLE [INTEGER_64] `

code_and_situation

Прикрепленный регистр (обновление)

Собственно при проверке с синтаксисом

attached {INTEGER_64} my_watt_object as l_int

enter image description here

тоже не проходит ... это ожидаемое поведение?

На самом деле мне кажется, что семантические падежи - это то же самое, что должно подтверждать шаг соответствия ... для меня (но, похоже, это не относится к определению язык соответствия / соответствия ), который гласит:

Соответствие и конвертируемость исключают друг друга, стр.87

Является ли правило соответствия действительным длятип, который определяет как convert тип для другого, который является моим случаем от WATT до INTEGER_64?

1 Ответ

0 голосов
/ 03 декабря 2018

В Eiffel преобразование, указанное языком, работает только во время компиляции.Он применяется, если источник присоединения не соответствует цели присоединения во время компиляции и имеется соответствующая функция преобразования.

Автоматическое преобразование не выполняется во время выполнения.Если вам нужен этот функционал, вам нужно реализовать его самостоятельно.В вашем примере, если тип аргумента WATT, вам нужно явно вызвать преобразование из INTEGER_64 в WATT и передать объект типа WATT, а не INTEGER_64.

...