delphi mysql变体类型_从Delphi到Go——函数的可变参数

Delphi

事实上,Delphi并没有什么可以直接为函数传递可变参数(数量可变、类型可变)的语法,但是并不是说不可能实现,最常用的Format()函数就是最好的例子。

虽然不能直接传递可变参数,但是通过一种叫做可变类型的开放数组即可实现为函数传递数量不定、类型不一的可变参数。

可变类型

可变类型不是变体类型,而是一个记录类型TVarRec,在System单元中的定义如下:

TVarRec = record { do not pack this record; it is compiler-generated }

case Integer of

0: (case Byte of

vtInteger: (VInteger: Integer);

vtBoolean: (VBoolean: Boolean);

vtChar: (VChar: _AnsiChr);

vtExtended: (VExtended: PExtended);

{$IFNDEF NEXTGEN}

vtString: (VString: _PShortStr);

{$ENDIF !NEXTGEN}

vtPointer: (VPointer: Pointer);

vtPChar: (VPChar: _PAnsiChr);

{$IFDEF AUTOREFCOUNT}

vtObject: (VObject: Pointer);

{$ELSE}

vtObject: (VObject: TObject);

{$ENDIF}

vtClass: (VClass: TClass);

vtWideChar: (VWideChar: WideChar);

vtPWideChar: (VPWideChar: PWideChar);

vtAnsiString: (VAnsiString: Pointer);

vtCurrency: (VCurrency: PCurrency);

vtVariant: (VVariant: PVariant);

vtInterface: (VInterface: Pointer);

vtWideString: (VWideString: Pointer);

vtInt64: (VInt64: PInt64);

vtUnicodeString: (VUnicodeString: Pointer);

);

1: (_Reserved1: NativeInt;

VType: Byte;

);

end;

开放数组

开放数组是在函数形参声明时使用的术语,语法为:

v : array of Type

开放数组与动态数组极为类似,但意义不同,使用开放数组就注意:

开放数组是形参,可传动态数组,也可传静态数组。

开放数组索引总是从0到Length()-1,与实参索引无关。

开放数组只能访问元素,不能对整个数组进行赋值操作。

开放数组的实参为数组时会创建数组的副本,传递大数组可能导致栈溢出,为避免栈溢出,可使用const或var进行修饰。

开放数组构造器

开放数组构造器的语法为:

[实参1, 实参2, 实参3]

开放数组构造器允许在函数或过程调用中直接构造数组

仅用于传递开放数组参数或可变类型开放数组参数

可变类型的开放数组

可变类型的开放数组即开放数组的元素类型为可变类型,语法为:

v : array of TVarRec

//或

v : array of const //通常使用该语法

两者的区别是:array of TVarRec可以定义一般的数组变量,array of const只能声明形参为可变类型的开放数组。

注意:可变类型的开放数组形参不能直接传递数组变量,实参必须通过开放数组构造器进行传递。

Go

Go有直接传递可变参数的语法:

func Func(args ...type) //...type即为变长类型的形参,当type为interface{}时即可传递任意数量、任意类型的参数

...type类型的形参只能有一个,且必须为最后一个形参。

...type本质上是[]type的切片。

调用时直接用逗号分隔各实参即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值