Eiffel: установка константы со ссылкой на константу другого класса - PullRequest
0 голосов
/ 29 января 2019

Как установить постоянную ссылку на другую константу класса в Eiffel?

К сожалению, что-то подобное не компилируется

Default_log_level: like {MY_LOGGER}.log_level = {MY_LOGGER}.Log_level_info

Ответы [ 2 ]

0 голосов
/ 30 января 2019

Атрибуты константы могут быть сделаны только из константы манифеста, но возможный обходной путь может заключаться в использовании замороженных разовых функций:

frozen Default_log_level: INTEGER
    once
       Result := {MY_LOGGER}.Log_level_info
    ensure
        definition: Result = {MY_LOGGER}.Log_level_info
    end

frozen означает, что его нельзя переопределить в классах-потомках (например, константе).Атрибуты).

К сожалению, тип функций once не может полагаться на привязанные типы, поэтому использование INTEGER вместо like {MY_LOGGER}.log_level.

И, наконец, недостаток этогоРешение заключается в том, что его нельзя использовать там, где ожидаются постоянные атрибуты (например, в инструкциях inspect).

0 голосов
/ 29 января 2019

Атрибуты констант не могут быть определены с использованием других атрибутов констант в текущей версии Eiffel.

...