#constants #eiffel
#константы #eiffel
Вопрос:
Какой в eiffel наилучший способ иметь константу, которую можно переопределить?
- class A => color: STRING = «зеленый»
- цвет B наследует A => не может переопределить
при наличии функции, которая возвращает только «зеленый» или «синий», строка должна быть создана заново, проблема с производительностью или не имеет значения?
Насколько я понял, onces нельзя повторно объявить…
Комментарии:
1. Не могли бы вы добавить код read Eiffel, объясняющий, что вы хотите сделать?
Ответ №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
Кроме того, сами строки манифеста могут быть определены как once:
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
Поведение в обоих случаях идентично, поэтому вы даже можете смешивать оба варианта. Производительность может отличаться, но лишь незначительно. В обоих случаях новые строки не создаются при каждом вызове.
Комментарии:
1. Несмотря на реализацию, я думаю
color: STRING once Result := "green" end
, должно бытьgreen: STRING once Result := "green" end
. В противномcolor
случае это фактически переменная. Возможно, определите набор цветовых констант, таких какgreen
илиblue
, и присвоите их переменной цвета или верните эту цветовую константу. В этом случаеcolor
должна быть (полиморфная) функция `.2. @U.Windl Я считаю, что в исходном вопросе существует общий предок
LIGHT
с отложенной функциейcolor
с некоторым значением по умолчанию (скажем,white
), которое необходимо переопределить вGREEN_LIGHT
, и т.д.YELLOW_LIGHT
без создания новых строковых объектов при каждом вызове.3. Извините, я вижу вопрос только в том виде, в каком он есть сейчас, а нет
LIGHT
. Возможно, урок состоит в том, чтобы предоставить несколько полных примеров для вопросов, чтобы уменьшить количество догадок.4. @U.Windl Правильно, в ответе не ставится вопрос, зачем нужна данная функциональность, он фокусируется на деталях реализации, а не на (потенциально высокоуровневых) проектных решениях. Однако, перечитывая ваш комментарий, я полагаю, я неправильно его понял: функция
color
действительно полиморфна, но должна была возвращать константу, а не новую строку при каждом вызове.