2011-04-07 37 views
3

在Delphi代碼,我在看我發現了以下一組行:const函數在Delphi

const 
    function1: function(const S: String): String = SomeVariable1; 
    function2: function(const S: String): String = SomeVariable2; 

這是什麼做的?我的意思是,不是函數中的實際代碼,但它是如何在const部分中聲明函數並將其與變量值進行比較(?)?我假設單一的等於是一個比較,因爲這是德爾福其他地方的情況。

謝謝。

+0

Andreas解釋**這是什麼**。但我看不到這是什麼。項目中是否啓用了「可指定類型常量」? – 2011-04-07 15:57:47

回答

18

不,等於是一個賦值,因爲這是如何分配常量。舉個例子,

const Pi = 3.1415; 

const s = 'This is an example'; 

另外還有 '類型的常量':

const Pi: extended = 3.1415; 

在上面的片段中,我們定義了持有的函數定義的常簽字function(const S: String): String。我們將(兼容)功能SomeVariable1分配給它。

SomVariable1,必須及早在代碼中定義的,例如,作爲

function SomeVariable1(const S: String): String; 
begin 
    result := S + '!'; 
end; 

請看下面的例子:

function SomeVariable1(const S: String): String; 
begin 
    result := S + '!'; 
end; 

const 
    function1: function(const S: String): String = SomeVariable1; 

procedure TForm1.FormCreate(Sender: TObject); 
begin 
    caption := function1('test'); 
end; 
+1

爲什麼這是低調的? – 2011-04-08 00:23:25

8

安德烈亞斯的回答涵蓋了技術位非常好,但我喜歡回答這個部分:

這是幹什麼的?

更多沿線Why use this weired-looking construct?我能想到的原因有兩個:

  • 代碼編寫與{$J+}(可指定類型的常量),而「不變」被分配在某個點不同的值。如果function1被聲明爲變量,則初始化將需要在單元的initialization部分完成,並且可能太晚(如果某個其他單元的initialization部分在該部分之前運行並且嘗試呼叫function1「功能」)
  • 如果函數名稱從function1更改爲SomeVariable1並且存在無法輕易更改的第三方代碼,則使用該函數。這提供了一種聲明別名的單線方式。
+0

看起來像第二個項目符號點是正確的,從項目的快速搜索來看,沒有找到函數名稱SomeVariable1。 – mnuzzo 2011-04-07 16:07:30