【发布时间】:2012-11-07 12:45:37
【问题描述】:
可以创建一个接受可变数量参数的函数:
function f(const x: array of const): String;
并以这种方式使用它:
f([1,3,4, "hello"]);
也可以将参数定义为“可变的”:
function g(var x: Byte): String;
var B: Byte;
g(B);
但是是否有可能定义一个函数,它可以接受任意数量的任何类型的参数并更改它们的所有值? 我知道我可以使用指针来做到这一点,但是我不知道传递的参数的类型,所以弄乱它们是非常不安全的。
我只想创建一个函数,它可以返回多种不同类型的变量,而不仅仅是一种类型或只有 1 个变量。而且我不想写无数行来使用这个函数——它应该只是函数本身,在函数调用之前没有 SetLength() 或任何东西。所以这是迄今为止我做的最好的东西:
type TVarArr = Array of Variant;
PVarArr = ^TVarArr;
Procedure f(a: PVarArr);
var
i:Integer;
begin
SetLength(A^, 4);
a^[0] := 46;
end;
ar: TVarArr;
begin
f(@ar);
caption := IntToStr(ar[0]);
【问题讨论】:
-
function f(var x: array of const): String;如此处所述:docwiki.embarcadero.com/RADStudio/XE3/en/… -
@DavidHeffernan 但我不能这样调用它:f([a, b, c]) 因为它给了我一个错误:“常量对象不能作为 var 参数传递”。那么如何调用这个函数呢?
-
好吧,我错了。你不能做你想做的事。对不起
-
不可能这样做,因为该函数没有收到任何要更改的内容。在
f([1, 3, 4, 'hello'])的情况下,接收的是值1、2、3和常量字符串hello。这就是为什么它被称为array of const- 因为它是恒定的(不可更改的)。 -
这是一个开放数组。使用动态数组:var a: TVarArray。从您的 cmets 中可以清楚地看出,您需要修改您对开放数组的了解。
标签: delphi