假设我有一个函数 f
,它应该通过调用 g
返回一个 attached T
。然而,g
返回一个可分离的 T
。如果 g
导致 Void,我想引发这样的异常:
f: T
do
if attached g as res then
Result := res
else
raise
end
end
raise
do
(create {DEVELOPER_EXCEPTION}).raise
end
在此设置中,EiffelStudio 给我一个错误 VEVI:未正确设置变量。变量:
。f
末尾的 Result
确实,Result 在 f
末尾可以为 Void,但在这种情况下执行不应到达 f
末尾,应该引发异常。
如何重构代码以获得类似的结果?
最佳答案
如果引发异常的类型无关紧要,则以下代码将起作用:
f: T
do
Result := g
check is_g_attached: attached Result then end
end
如果引发的异常的类型很重要,则可以使用后置条件 False
来扩充功能 raise
以指示该功能永远不会返回。然后,代码看起来像
f: T
do
Result := g
if not attached Result then
raise
end
end
raise
do
(create {DEVELOPER_EXCEPTION}).raise
ensure
False
end
关于eiffel - 结果附加或异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66322061/