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

delphi与变长参数——开放数组(1)

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

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

 

可变类型的开放数组

      

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

[delphi]  view plain  copy
  1. //定义含有变体开放数组参数的方法  
  2. procedure DoSomething(A: array of const);  
  3.   
  4. procedure DoSomething(A: array of TVarRec);  

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

[delphi]  view plain  copy
  1. var   
  2. arr:array of const;//错误  
  3. arr:array of TVarRec;//合法  
  4. DoSomething(arr);//合法  

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

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

[delphi]  view plain  copy
  1. DoSomething([1,2,'a','tht']);//正确  
  2.   
  3. var  
  4. arr:array[0..10of Integer;  
  5. ...//赋值  
  6. DoSomething(arr);//错误  

开放数组构造器

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

扫描二维码关注公众号,回复: 1762989 查看本文章

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


猜你喜欢

转载自blog.csdn.net/aiib69/article/details/79223874