Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - reference to procedure?
Christian213 - Fr 02.08.13 10:39
Titel: reference to procedure?
Hallo,
in Delphi ab 2009 scheint folgendes möglich:
Delphi-Quelltext
1:
| type TNTDownLoadProgressCallBack = reference to procedure(Current, Total: Cardinal); |
Das funzt in Lazarus (noch) nicht. Wo genau ist der Unterschied zu einer Typdefinition wie:
Delphi-Quelltext
1:
| type TNTDownLoadProgressCallBack = procedure(Current, Total: Cardinal); |
Und wie könnte man die o.g. Definition ohne "reference to" abbilden?
Danke :-)
Nersgatt - Fr 02.08.13 10:44
Christian213 hat folgendes geschrieben : |
Wo genau ist der Unterschied zu einer Typdefinition wie: |
Das gibt an, dass es sich um eine anonyme procedure/function handelt.
Du könntest also in Delphi ein Function schreiben, die Dir nach Auswertung der Parameter jeweils verschiedene functions/procedures zurückgibt. Diese Rückgabetyp definiert man mit
reference to
Wie Du das in Lazarus abbilden kannst, weiß ich leider nicht, da ich nicht mit Lazarus arbeite.
Christian213 - Fr 02.08.13 10:54
Hallo Jens,
Danke für die Antwort.
Funktionsdefintionen als Übergabeparameter benutze ich in Lazarus ja bereits, dort habe ich als Typedefinition dann einfach
Delphi-Quelltext
1:
| type TMeineProcedur = procedure(A, B: Integer); |
oder wie auch immer. Das funktioniert auch, solange der Variablentyp und die Anzahl bei der Zielfunktion passen.
Nur wo ist der Unterschied zu einer "anonymen Prozedur"? Kann ich das "reference of" evtl. einfach weglassen?
Nersgatt - Fr 02.08.13 11:42
Eine anonyme procedure kannst Du ohne Namen erstellen.
Das sähe ungefährt so aus:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24:
| type Tproc = reference to procedure(A : Integer);
procedure TuWas; var bla : Tproc; begin
if Aussentemperatur > 30°C then begin bla := procedure(A : Integer) begin MachwasmitA(A); end; end else begin bla := procedure(A : integer) begin MasWasAnderesMitA(A); end; end;
bla(42); end; |
Christian213 - Fr 02.08.13 12:24
Ok, dann kann ich in meinem konkreten Fall darauf wirklich verzichten.
Wunderbar, vielen Dank nochmal.
Martok - Fr 02.08.13 14:45
Lazarus hat dafür "is nested" als suffix (so wie "of object"), was es dir erlaubt, lokale Funktionen weiterzugeben.
Das ist quasi die Version, die etwas näher an der Sprache Pascal dran bleibt ;)
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!