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

#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 действительно полиморфна, но должна была возвращать константу, а не новую строку при каждом вызове.