为什么我必须使用我的类型名称来操作它? [Delphi/Lazarus]

Why do I have to use the name of my type to operate it? [Delphi/Lazarus]

type    
  TSpieler = record
    Name  : string;
    Konto,Position : integer;
    Reihe : boolean;
    Panel : TPanel;
  end;   

var
  PL1, PL2, PL3, PL4, PL5 : TSpieler;

function getPlayer;
begin
  Result := PL1;
end;

procedure FeldKaufen;
var
  TestPlayer: TSpieler;
begin
  TestPlayer := getPlayer; {PL2,PL3,PL4,PL5}
  inc(TestPlayer.Konto); {does not save}
  {inc(PL1.Konto);}      {works just fine with every Player}
end;

如何保存 PL1 值并从 TestPlayer 编辑它们?

问题是我通过这个 getPlayer 函数获取玩家的名字,这很好,因为它使整个代码更简洁。

您还没有编写可验证的代码。

然而,记录是value type(与引用、指针类型(对象)相反),并且将一个记录分配给另一个只是复制所有字段。因此更改第二条记录(副本)不会影响第一条记录(记录指针字段等特殊情况除外).

一种解决方案是使用指向 Spieler 的指针:

type
  PSpieler = ^TSpieler;
  TSpieler = record
    Name: string;
    Konto, Position: integer;
    Reihe: boolean;
    Panel: TPanel;
  end;

var PL1, PL2, PL3, PL4, PL5: TSpieler;

function getPlayer: PSpieler;
begin
  Result := @PL1;
end;

procedure FeldKaufen;
var TestPlayer: PSpieler;
begin
  TestPlayer := getPlayer; {PL2,PL3,PL4,PL5}
  inc(TestPlayer.Konto);   {does not save}
  {inc(PL1.Konto);}        {works just fine with every Player}
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  FeldKaufen;
end;