繁体   English   中英

埃菲尔:参照其他类常量设置一个常量

[英]Eiffel: setting a constant with reference to other class constant

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

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

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指令中)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM