2011-04-07 83 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