我有一个记录类型

tLine = record
  X, Y, Count : integer;
  V : boolean;
end;

我有一个
function fRotate(zLine: tLine; zAngle: double): tLine;

我想传递zLine,但是将Y字段减小1。是否可以将记录分解为过程或函数的特定字段?我试过了
NewLine:=fRotate((zLine.X, zLine.Y-1, zLine.Count, zLine.V), zAngle);

这不起作用。
还是我必须执行以下操作:
dec(zLine.Y);
NewLine:=fRotate(zLine, zAngle);
inc(zLine.Y);

TIA

最佳答案

您通常会为此做一个功能。在具有增强记录的现代Delphi中,我喜欢使用这样的静态类函数:

type
  TLine = record
  public
    X: Integer;
    Y: Integer;
    Count: Integer;
    V: Boolean;
  public
    class function New(X, Y, Count: Integer; V: Boolean): TLine; static;
  end;

class function TLine.New(X, Y, Count: Integer; V: Boolean): TLine;
begin
  Result.X := X;
  Result.Y := Y;
  Result.Count := Count;
  Result.V := V;
end;

然后,您的函数调用将变为:
NewLine := fRotate(TLine.New(zLine.X, zLine.Y-1, zLine.Count, zLine.V), zAngle);

在较旧的Delphi版本中,您必须在全局范围内使用一个函数。

关于Delphi:将记录参数分割为字段,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45862805/

10-12 23:08