Каков наилучший способ объявить константу в классе, который можно переопределить

Что такое в eiffel лучший способ иметь константу, которую можно переопределить?

  • класс A =› цвет: STRING = зеленый
  • цвет B наследует A => не может переопределять

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

Насколько я понял, разы нельзя переобъявить...


person Pipo    schedule 16.10.2020    source источник
comment
Не могли бы вы добавить код чтения Эйфеля, объясняющий, что вы хотите сделать?   -  person U. Windl    schedule 24.05.2021


Ответы (1)


Однажды функции могут быть переопределены как любые другие функции. Примером будет

class A feature
    color: STRING once Result := "green" end
end

class B inherit A redefine color end feature
    color: STRING once Result := "blue" end
end

Кроме того, сами строки манифеста могут быть определены как один раз:

class A feature
    color: STRING do Result := once "green" end
end

class B inherit A redefine color end feature
    color: STRING do Result := once "blue" end
end

Поведение в обоих случаях идентично, так что можно даже смешивать оба варианта. Производительность может отличаться, но незначительно. В обоих случаях новые строки не создаются при каждом вызове.

person Alexander Kogtenkov    schedule 16.10.2020
comment
Несмотря на реализацию, я думаю, что color: STRING once Result := "green" end должно быть green: STRING once Result := "green" end. В противном случае color на самом деле является переменной. Возможно, определить набор цветовых констант, таких как green или blue, и назначить их цветовой переменной или вернуть эту цветовую константу. В этом случае color должна быть (полиморфной) функцией. - person U. Windl; 24.05.2021
comment
@U.Windl Я считаю, что в исходном вопросе есть общий предок LIGHT с отложенной функцией color с некоторым значением по умолчанию (скажем, white), которое необходимо переопределить в GREEN_LIGHT, YELLOW_LIGHT и т. д. без создания новых строковых объектов при каждом вызове. . - person Alexander Kogtenkov; 24.05.2021
comment
Извините, я вижу вопрос только в том виде, в котором он сейчас здесь, и нет LIGHT. Может быть, урок состоит в том, чтобы предоставить несколько полных примеров для вопросов, чтобы уменьшить количество догадок. - person U. Windl; 26.05.2021
comment
@U.Windl Правильно, ответ не спрашивает, зачем нужна данная функциональность, он фокусируется на деталях реализации, а не на проектных решениях (потенциально более высокого уровня). Однако, перечитывая ваш комментарий, я думаю, я неправильно его понял: функция color действительно полиморфна, но должна возвращать константу, а не новую строку при каждом вызове. - person Alexander Kogtenkov; 26.05.2021