Delphi 2007中是否可以创建一个退出函数?

3
我正在使用Delphi 2007,并想知道以下内容是否可行,如果不行,那么在另一个版本的Delphi中是否可行。
我目前的代码类似于,但我希望有类似于的东西。
我已经创建了并且它可以工作,但我更喜欢将函数放在一个地方而不是许多地方作为子过程。
function foo(const bar: Word): boolean;
begin
  Result:= bar = 42;
end;

function doo1: integer;
begin
  if not foo(42) then begin
    Result:= 1;
    exit;
  end;
  if not foo(8) then begin
    Result:= 2;
    exit;
  end;
  Result:= 0;
end;

function doo2: integer;
  Procedure exitIfFalse(const AResult: boolean; const AResultCode: integer);
  begin
    if not AResult then begin
      Result:= AResultCode;
      Abort;
    end;
  end;
begin
  Result:= -1;
  try
    exitIfFalse(foo(42), 1);
    exitIfFalse(foo(8), 2);
    Result:= 0;
  except
    on e: EAbort do begin
    end;
  end;
end;

function doo3: integer;
begin
  exitIfFalse(foo(42), 1);
  exitIfFalse(foo(8), 2);
  Result:= 0;
end;

你可以通过将 'Result' 作为变量参数传递来使 'exitIfFalse' 非局部化。 - Sertac Akyuz
@SertacAkyuz 这是修改“Result”的好方法,但不是停止执行的方法。 - user743382
@SertacAkyuz 是的,这是一个聪明的方法,更接近了目标,但我仍然需要try-except子句。 - Kjaran Sveinsson
是的,我并没有说它会更好。 :) - Sertac Akyuz
1个回答

8

Delphi的后续版本(2009及更高版本)接近实现:它们允许您编写

function doo3: integer;
begin
  if not foo(42) then Exit(1);
  if not foo(8) then Exit(2);
  Result:= 0;
end;

请注意新的Exit(value)格式如何与更传统的Result结合使用。

Delphi 2007没有官方支持此功能或类似功能。

一种完全不受支持的技巧可能对您有用:Andreas Hausladen的DLangExtensions(确保使用旧版本)也为Delphi 2007提供了此语法。


http://andy.jgknet.de/dlang/ 的文档中没有提到 exit 结构。 - Johan
@Johan 我已经注意到“确保使用旧版本”的问题。最新版本仅适用于D2009,而不适用于D2007,并且与Exit相关的内容也没有添加,因为D2009已经本地支持该功能。 - user743382
2
@Johan 来自开发快照版本: "已删除:泛型和扩展Exit(两者均被Delphi 2009取代) 已删除:不再支持Delphi 5-2007。仅支持Delphi 2009"(最新版本) "已添加:Exit(返回值)"(早两个版本)。 - user743382

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接