arrays - 为什么我不能返回任意字符串数组?

标签 arrays delphi delphi-xe3

编译器允许我执行以下操作:

procedure MyProc(const ADynData: array of string);

procedure MyProc(const ADynData: TStringDynArray);

并像这样传递任意数据:

MyProc(['Data1', 'Data2']);

但是,不允许

function MyFunc: TStringDynArray;
....
function MyFunc: TStringDynArray;
begin
    Result := ['Data1', 'Data2'];
end;

function MyFunc: TStringDynArray;
const
    CDynData: array[0..1] of string = ('Data1', 'Data2');
begin
    Result := CDynData;
end;

这是为什么呢?这在技术上不是一样的吗?

对于这些特定场景,返回任意字符串数组的推荐(也是最有效)的方法是什么?

最佳答案

不,这不是同一件事。在

procedure MyProc(const ADynData: array of string);

参数是 open array parameter ,这与“普通”动态数组不同。 [..] 语法只能用于在函数的开放数组参数中创建开放数组。 (否则,[..]用于在代码中指定集合,例如Font.Style := [fsBold, fsItalic]。但是sets 只能将序数类型作为其“基本类型”,因此仍然不存在“字符串集”之类的东西。)

换句话说,不可能像您在第二个代码片段中尝试的那样在代码中编写动态数组,

function MyFunc: TStringDynArray;
begin
  result := ['Data1', 'Data2']; // Won't work.
end;

但是,在新版本的 Delphi 中,这几乎是可能的:

type
  TStringDynArray = array of string;

function MyFunc: TStringDynArray;
begin
  result := TStringDynArray.Create('A', 'B');
end;

最后,

function MyFunc: TStringDynArray;
const
  CDynData: array[0..1] of string = ('Data1', 'Data2');
begin
  result := CDynData;
end;

不起作用,因为 TStringDynArraydynamic array ,而 CDynDatastatic array ,这是两种不同的基本类型。

关于arrays - 为什么我不能返回任意字符串数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15923602/

相关文章:

python - 使用 NumPy argsort 并接收二维数组

c - C中多维数组的内部数组的元素数

c - 这是释放作为结构一部分的多个动态分配数组的正确方法吗?

python - 在 numpy 中将数组拼接在一起

delphi - 类名后面的尖括号在变量声明中意味着什么?

delphi - CryptAcquireContext和CryptDeriveKey x64模式

multithreading - Delphi 表单创建无需卡住主线程

delphi - 我可以在Delphi中更改TSavetextfiledialog的保存按钮上的标题吗?

delphi - TIdTCPClient 到 SSL

delphi - Delphi XE3:阅读表格时出错。找不到类(class)