为什么我必须使用我的类型名称来操作它? [德尔福/拉扎勒斯]

时间:2017-08-19 15:31:46

标签: delphi record pascal 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值?

问题是我通过这个app.UseMvc()函数得到了播放器的名称,这很好,因为它使整个代码更清晰。

2 个答案:

答案 0 :(得分:3)

您尚未编写可验证的代码。

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

答案 1 :(得分:2)

一种解决方案是使用指向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;