我正在查看Delphi: array of Char and TCharArray "Incompatible Types"并开始尝试。我的发现很有趣。
procedure Clear(AArray: array of Integer);
var
I: Integer;
begin
for I := Low(AArray) to High(AArray) do
AArray[I] := 0;
end;
var
MyArray: array of Integer;
begin
Clear(MyArray);
end.
这个简单的小示例展示了如何使用开放数组参数将动态数组传递给过程。它完全按照预期编译和运行。
procedure Clear(AArray: array of Char);
var
I: Integer;
begin
for I := Low(AArray) to High(AArray) do
AArray[I] := #0;
end;
var
MyArray: array of Char;
begin
Clear(MyArray);
end.
这是几乎相同的代码,唯一的区别是它使用 Char
数组而不是 Integer
。它无法编译。相反,编译器会输出:
E2010 Incompatible types: 'Array' and 'Dynamic array'
为什么会这样?
搜索了一段时间后我发现this质量控制报告。我正在运行 Delphi 2009 并且它仍然发生。
最佳答案
由于文档特别提到 Char 类型的开放数组参数与动态数组兼容,因此这应该是一个错误。来自 'Open Array Parameters' :
function Find(A: array of Char):
Integer;
[...]
Note: [...] The previous example creates a function that takes any array of Char elements, including (but not limited to) dynamic arrays. [...]
关于delphi - 当参数类型为开放Char数组时,是否允许使用动态Char数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3781691/