delphi – 将无限数量的参数传递给程序

在Delphi中的程序写可以处理:
write(TF,st1)

write(TF,st1,st2,st3,st4);

我想声明一个也可以这样做的过程,什么是语法?

并选择:

write(TF,[st1,st3])

不太可取,虽然我知道如何做到这一点.

主要目的是将ShortStrings传递给函数,这将从文件中进行读取调用,并按照定义的长度读取shortString.然而,通过它作为变体或开放数组,shortString失去了它的“大小”,成为255,这使得这个传递不可用,对我来说.
但是如果要传递打开的数组,答案仍然是.

解决方法

首先,Inc和Write都是错误的例子,因为它们都从编译器得到特殊的处理.你不能写一个类似于你自己的功能.有什么应该调查的方法.

看看超载

您可以使用不同数量的参数和不同类型创建多个版本的方法.这样的事情

procedure MyInc(var i:Integer); overload;
procedyre MyInc(var i:Integer; const N:Integer); overload;
procedure MyInc(var i:Integer; const N1,N2: Integer); overload;
procedure MyInc(var i:Integer; const N1,N2,N3: Integer):overload;

如果所需的重载数量不是很大,这是可行的.编译器可能很容易处理大量的重载,但是你可能不想写它们.当重载次数变成问题时,可以切换到数组:

使用Open Arrays作为参数

函数可以使用YourType类型数组的参数,当您调用该函数时,您可以传递尽可能多的参数:

procedure MyInc(var i:Integer; Vals: array of Integer);

然后使用它:

MyInc(i,[]); // no parameters
MyInc(i,[1]);
MyInc(i,[1,34,43,12]);

相关文章

 从网上看到《Delphi API HOOK完全说明》这篇文章,基本上都...
  从网上看到《Delphi API HOOK完全说明》这篇文章,基本上...
ffmpeg 是一套强大的开源的多媒体库 一般都是用 c/c+&#x...
32位CPU所含有的寄存器有:4个数据寄存器(EAX、EBX、ECX和ED...
1 mov dst, src dst是目的操作数,src是源操作数,指令实现的...