Eiffel: red, green, blue, foo, bar: INTEGER 是唯一的

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

我记得我可以做类似

的事情

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

在埃菲尔,它过时了吗?是什么原因?用什么代替它?

唯一常量属性现在已过时。一种新的类型安全机制正在开发中。同时,最接近的替代方法是使用常量属性:

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 或更高版本才能使用 class 功能。