首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> Delphi

Delphi 2009 匿名方法:reference to 語法與捕獲變量機制

     編輯:Delphi

從方法指針到匿名方法:Delphi 2009 函數式編程能力躍升

Delphi 2009 引入 reference to 定義匿名方法類型,支援內聯定義方法體、捕獲外部變量(閉包)、作為參數傳遞,大幅簡化回調、事件、線程任務等場景代碼。

傳統方法指針方式

type TFun = function(const num: Integer): Integer;
function MySqr(const num: Integer): Integer; begin Result := num * num; end;

procedure MyProc(var x: Integer; fun: TFun); begin x := fun(x); end;

var fun: TFun; n: Integer;
begin fun := MySqr; n := 9; MyProc(n, fun); end; {81}

匿名方法新寫法

type TFun = reference to function(const num: Integer): Integer;

procedure TForm1.FormCreate(Sender: TObject);
var fun: TFun; n: Integer;
begin
  {求平方}
  fun := function(const a: Integer): Integer  {注意:此行無分號}
  begin Result := a * a; end;
  n := fun(9); ShowMessage(IntToStr(n)); {81}

  {求倍數}
  fun := function(const a: Integer): Integer
  begin Result := a + a; end;
  n := fun(9); ShowMessage(IntToStr(n)); {18}
end;

作為參數傳遞

type TFun = reference to function(const num: Integer): Integer;

function FunTest(const n: Integer; fun: TFun): string;
begin Result := Format('%d, %d', [n, fun(n)]); end;

procedure TForm1.FormCreate(Sender: TObject);
var f: TFun; s: string;
begin
  f := function(const a: Integer): Integer
  begin Result := a * a; end;
  s := FunTest(9, f); ShowMessage(s); {9, 81}
end;

關鍵語法點

  • reference to 替代舊式方法類型定義
  • 匿名方法定義行 不能有分號:function(...) : Type 直接接 begin
  • 自動捕獲外部局部變量(閉包),生命周期由引用計數管理
  • 可賦值給同類型變量、作為參數、作為返回值

應用場景: 線程池任務、並行庫回調、LINQ 風格查詢、事件處理器動態生成、延遲執行封裝。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved