Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Wie anonyme Funktion nutzen? (https://www.delphipraxis.net/205924-wie-anonyme-funktion-nutzen.html)

BlueStarHH 30. Okt 2020 14:40

Delphi-Version: 10.3 Rio

Wie anonyme Funktion nutzen?
 
Ich habe folgende Funktion:

Delphi-Quellcode:
TMyFunc = function(Item: TListItem): Boolean of object;

function Foo(AFunc: TMyFunc = nil): Boolean;
begin
 
end;
Wenn ich Foo aufrufen, möchte ich nun im Parameter AFunc eine anonyme Funktion wie folgt nutzen:

Delphi-Quellcode:
...
begin
  Foo(function (Item: TListItem): Boolean
    begin
      //do something
    end
  );
end;
Doch das gibt den Fehler:
E2010 Inkompatible Typen: 'TMyFunc' und 'Procedure'

Was ist zu tun?

Fritzew 30. Okt 2020 14:52

AW: Wie anonyme Funktion nutzen?
 
Ändere
Delphi-Quellcode:
TMyFunc = function(Item: TListItem): Boolean of object;
zu

Delphi-Quellcode:
TMyFunc = reference to function(Item: TListItem): Boolean;

BlueStarHH 30. Okt 2020 15:07

AW: Wie anonyme Funktion nutzen?
 
Zitat:

Zitat von Fritzew (Beitrag 1476449)
Ändere
Delphi-Quellcode:
TMyFunc = function(Item: TListItem): Boolean of object;
zu

Delphi-Quellcode:
TMyFunc = reference to function(Item: TListItem): Boolean;

Danke, klappt!

himitsu 30. Okt 2020 15:25

AW: Wie anonyme Funktion nutzen?
 
Delphi-Quellcode:
function() of object
nimmt nur Objekt- und Klassen-Methoden auf,
Delphi-Quellcode:
function()
nimmt nur Prozeduren und statische Klassen-Methoden auf
und
Delphi-Quellcode:
reference to function()
nimmt alles, auch anonyme Methoden

generic 1. Nov 2020 20:02

AW: Wie anonyme Funktion nutzen?
 
In meinen Video erkäre ich das etwas:
Zeiger auf Methoden und Funktionen in Delphi - https://youtu.be/7PL_H2aBUOI


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:23 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz