Eiffel: красный, зеленый, синий, фу, бар: INTEGER уникален - PullRequest
0 голосов
/ 08 октября 2018

Я вспомнил, что смог сделать что-то вроде

red, green, blue, foo, bar: INTEGER is unique

в Eiffel, это устарело?по какой причине?Чем это заменить?

1 Ответ

0 голосов
/ 08 октября 2018

Уникальные постоянные атрибуты теперь устарели.Новый типобезопасный механизм находится в стадии разработки.Между тем, ближайшая альтернатива - использование константных атрибутов:

red: INTEGER = 1
green: INTEGER = 2
blue: INTEGER = 3
foo: INTEGER = 4
bar: INTEGER = 5

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

expanded class QUX inherit
    ANY
        redefine
            default_create
        end 
feature {NONE} -- Creation
    default_create do make (1) end
feature {QUX} -- Initialization
    make (value: like item) do item := value end
feature -- Enumeration
    red: QUX
        once
            Result.make (1)
        ensure
            instance_free: class
        end
    green: QUX
        once
            Result.make (2)
        ensure
            instance_free: class
        end
feature -- Access
    item: INTEGER
end

Затем в коде вы бынапишите:

x: QUX
...
x := {QUX}.red
if x = {QUX}.green then ...

Примечание. Для использования функций класса может потребоваться установить EiffelStudio 18.07 или более позднюю версию.

...