首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么在接收数组参数的函数中不能使用SetLength?

为什么在接收数组参数的函数中不能使用SetLength?
EN

Stack Overflow用户
提问于 2012-10-19 00:02:19
回答 2查看 5.8K关注 0票数 9

我尝试使用下面的函数来设置动态数组的长度,它是一个var参数。只有当我尝试编译代码时才会出现错误:

dcc64错误lolcode.dpr(138):E2008不兼容的类型

代码语言:javascript
复制
function execute(var command : array of string) : Boolean;
begin
  // Do something
  SetLength(command,0);
end;
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-10-19 00:03:28

定义类型

代码语言:javascript
复制
type
  TStringArray = array of string;

你可以这样做

代码语言:javascript
复制
function Execute(var StringArray: TStringArray): boolean;
begin
  // Do something
  SetLength(StringArray, 0);
end;
票数 10
EN

Stack Overflow用户

发布于 2012-10-19 00:15:16

您正遭受着对数组参数的常见和基本的误解。你在这里有什么:

代码语言:javascript
复制
function execute(var command: array of string): Boolean;

实际上并不是一个。它是一个。

现在,您可以将动态数组作为参数传递给接收开放数组的函数。但不能修改动态数组的长度。您只能修改其元素。

如果需要修改动态数组的长度,则该过程必须接收动态数组。在现代Delphi中,惯用的写法是:

代码语言:javascript
复制
function execute(var command: TArray<string>): Boolean;

如果您使用的是不支持泛型数组的旧版Delphi,则需要为参数声明一个类型:

代码语言:javascript
复制
type
  TStringArray = array of string;
....
function execute(var command: TStringArray): Boolean;

应该如何选择是使用开放数组参数还是使用动态数组参数?在我看来,如果可能的话,你应该总是使用开放数组。如果不可能,那么使用动态数组作为最后的手段。原因是具有开放数组参数的函数比具有动态数组参数的函数更通用。例如,可以将大小固定的数组作为开放数组参数传递,但如果函数接收动态数组,则不能。

票数 17
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12958858

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档