delphi与变长参数——可变类型开放数组(3)

        上接delphi与变长参数——开放数组(2)

 

可变类型的开放数组

      

       现在回到文章开头提到的可变类型的开放数组,可变类型的开放数组允许向单个过程或函数传递不同类型表达式的数组。要定义含有变体开放数组参数的方法,需要指定“array of const”或“array of TVarRec”作为参数类型。【注1】

//定义含有变体开放数组参数的方法
procedure DoSomething(A: array of const);

procedure DoSomething(A: array of TVarRec);

        array of const在定义参数时等价于array of TVarRec。array of const 只能指定参数的类型为可变类型的开放数组参数(array of TVarRec),而不能用其定义数组变量,但array of TVarRec还可以用来定义TVarRec类型的数组变量,而且可以将这个数组变量当作参数传递给可变类型的开放数组参数的方法。

var 
arr:array of const;//错误
arr:array of TVarRec;//合法
DoSomething(arr);//合法

       TVarRec类型用于含有array of const类型的参数的函数内部,编译器自动通过开放数组构造器来构造开放数组参数的实参,将构造器中的每个元素转换为TVarRec值,VType字段表示每个TVarRec值的简单类型,可变类型常量(如vtInteger类型时的VInteger)表示为传递到TVarRec结构中的标记字段的值。

       虽然TVarRec是可变类型,它能“容纳”各种基础数据类型,但这种“容纳”是通过开放数组构造器来实现的,编译器本身并不能自动实现,即TVarRec与其他数据类型是不兼容的,不能将其他类型的数组变量传递给开放数组参数的方法。

DoSomething([1,2,'a','tht']);//正确

var
arr:array[0..10] of Integer;
...//赋值
DoSomething(arr);//错误

开放数组构造器

       开放数组构造器允许在函数或过程调用中直接构造数组;它们仅用于传递开放数组参数或可变类型开放数组参数。

       与集合构造器相似,开放数组构造器是一个由方括号封装、逗号隔开的表达式序列。开放数组构造器仅用于传递值参数或常量参数。构造器中的表达式必需与开放数组参数的基类型是赋值兼容的。对于可变类型开放数组参数的情况,表达式可以是不同类型的。【注2】

 

 

  


注1:请参考http://www.87871.cn/tool/help/Pascal/Source/Procedures%20and%20functions/Variant%20open%20array%20parameters.htm

注2:请参考http://www.87871.cn/tool/help/Pascal/Source/Procedures%20and%20functions/Open%20array%20constructors.htm

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值