Eiffel:参考其他 class 常量设置常量

Eiffel: setting a constant with reference to other class constant

如何在 Eiffel 中设置一个引用另一个 class 常量的常量?

不幸的是,类似的东西无法编译

Default_log_level: like {MY_LOGGER}.log_level = {MY_LOGGER}.Log_level_info

无法使用当前版本的 Eiffel 中的其他常量属性定义常量属性。

常量属性只能由清单常量构成,但可能的解决方法是使用一次冻结函数:

frozen Default_log_level: INTEGER
    once
       Result := {MY_LOGGER}.Log_level_info
    ensure
        definition: Result = {MY_LOGGER}.Log_level_info
    end

frozen表示不能在后代中重新定义类(如常量属性)。

不幸的是,once 函数的类型不能依赖锚定类型,因此使用 INTEGER 而不是 like {MY_LOGGER}.log_level

最后,这个解决方案的缺点是它不能用于需要常量属性的地方(例如在 inspect 指令中)。