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