Delphi中的函数和过程(默认值和可选参数)

Cha*_*iga 0 delphi

编辑:

有没有更好的方法呢?

TPendingBets = class(TDataModule)
  private
  public
    function    GetBdy(out IdEvent : Integer                           )                                                           : Boolean; overload;
    function    GetBdy(out IdEvent : Integer; out idBetType : TBetTypes)                                                           : Boolean; overload;
    function    GetBdy(out IdEvent : Integer; out idBetType : TBetTypes; Out TotalOrgStake,Price : Double; out PriceError :Boolean): Boolean; overload;
  end;

implementation
Run Code Online (Sandbox Code Playgroud)

////////////////////

function    TPendingBets.GetBdy(out IdEvent : Integer ): Boolean;
var idBetType : TBetTypes;
    TotalOrgStake,Price : Double;
    PriceError :Boolean;
begin
   result :=  GetBdy(IdEvent,idBetType,TotalOrgStake,Price,PriceError);
end;
Run Code Online (Sandbox Code Playgroud)

////////////////////

function    TPendingBets.GetBdy(out IdEvent : Integer; out idBetType : TBetTypes): Boolean;
var TotalOrgStake,Price : Double;
    PriceError :Boolean;
begin
   result :=  GetBdy(IdEvent,idBetType,TotalOrgStake,Price,PriceError);
end;
Run Code Online (Sandbox Code Playgroud)

////////////////////

function    TPendingBets.GetBdy(out IdEvent : Integer; out idBetType : TBetTypes; Out TotalOrgStake,Price : Double; out PriceError :Boolean): Boolean;
begin
    result :=  false;
    if cdBdy.Eof = False then
    begin
       IdEvent   :=   cdBdy.FieldByName(IdEvent ).AsInteger);
       idBetType :=   TBetTypes(cdBdy.FieldByName(idBetType ).AsInteger);
       //.
       //.
       result := True;
    end;  
end;
Run Code Online (Sandbox Code Playgroud)

注意:

由于我最初的问题不是很清楚,我已经删除了部分内容

Jim*_*eth 9

重载并不意味着在函数中有5个代码副本.您可能有5个函数,但其​​中4个函数使用正确的参数调用 main函数.

我一般不喜欢出来的参数.您是否考虑过返回包含所有结果的记录?

Fn1Result = record
  A: Extended;
  B: Integer;
  C, D, E, F: Extended
  S: String;
end;
Run Code Online (Sandbox Code Playgroud)

然后声明你的函数:

function Fn1: Fn1Result;
begin
  Fn1.A := C_ConstA;
  // etc. . . .
end;
Run Code Online (Sandbox Code Playgroud)

当然我假设您没有使用输出参数作为输入.根据Delphi的帮助:

out参数(如变量参数)通过引用传递.但是,使用out参数时,引用变量的初始值将被传递给它的例程放弃.out参数仅用于输出; 也就是说,它告诉函数或过程存储输出的位置,但不提供任何输入.

我觉得你使用输出参数作为输入参数很有趣.别.如果您希望它们双向传递,请将它们作为var传递.


Uwe*_*abe 5

我认为过载解决方案是一个很好的解决方案,至少它是一个.其他编程语言要求您声明具有不同名称的函数.

另一种方法可能是动态数组参数,如:

type
  TExtendedDynArray = array of Extended;  // if not already declared elsewhere

function Fn1(out arr: TExtendedDynArray): Boolean;
Run Code Online (Sandbox Code Playgroud)