gpt4 book ai didi

delphi - 使用嵌套 "try/finally" "try/except"语句

转载 作者:行者123 更新时间:2023-12-03 18:53:52 35 4
gpt4 key购买 nike

我在 StackOverflow 上看到过这段代码:

with TDownloadURL.Create(nil) do
try
URL := 'myurltodownload.com';
filename := 'locationtosaveto';
try
ExecuteTarget(nil);
except
result := false;
end;
if not FileExists(filename) then
result := false;
finally
free;
end;

难道不能简化成这样吗:

 Result:= FALSE;               <--------- Compiler complains
DeleteFile(Dest);
dl:= TDownloadURL.Create(NIL);
TRY
dl.URL:= URL;
dl.FileName:= Dest;
dl.ExecuteTarget(NIL);
Result:= FileExists(Dest);
FINALLY
dl.Free;
END;

The final Result:= ... 如果在“ExecuteTarget”中出现问题,则永远不会执行,因为程序将直接跳转到“finally”。正确的?因此,该函数将返回 FALSE。我做错了什么吗?


附言:

  1. 我打算在线程中使用此代码。
  2. 我只是把这个函数放在 Delphi 中,编译器提示第一行:“赋值从未使用过。”

最佳答案

不同之处在于您的第二个示例将异常传递回调用者,而原始示例捕获它们并返回 false。我将这种编码风格描述为“我不在乎它为什么失败,我只在乎它是否成功”。在某些情况下这可能是合理的(例如尝试下载更新)。

因此您的代码在这方面与原始代码有很大不同 - 您期望调用者处理原始代码不处理的异常。

此外,编译器提示是因为您的代码中没有分支 - 如果有效并且结果由第二个赋值确定,或者您有异常并且结果无关紧要。

Result := FALSE; //   <--------- Compiler complains
DeleteFile(Dest);
dl := TDownloadURL.Create(nil);
try
dl.URL := URL;
dl.FileName := Dest;
dl.ExecuteTarget(nil);
Result := FileExists(Dest);
finally
dl.Free;
end;

关于delphi - 使用嵌套 "try/finally" "try/except"语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3526749/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com