问题标签 [open-array-parameters]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
2610 浏览

delphi - 当参数类型是 Char 的开放数组时,是否允许 Char 的动态数组?

我在看Delphi: array of Char and TCharArray "Incompatible Types"并开始试验。我的发现相当有趣。

这个简单的小示例展示了如何使用 Open Array 参数将动态数组传递给过程。它完全按预期编译和运行。

这是几乎相同的代码,唯一的区别是它使用数组Char而不是Integer. 它不编译。相反,编译器会吐出:

为什么会这样?

搜索了一段时间后,我发现了这个QC 报告。我正在运行 Delphi 2009,它仍在发生。

0 投票
5 回答
295 浏览

delphi - 如何将一组对象传递给一个函数进行创建?

所以我在 Delphi 2007 工作,我正在清理我的代码。我注意到在很多过程中我声明了许多相同类型的不同变量。

例如,我现在正在查看的一个过程我声明了 4 个不同的字符串列表,并且我必须var1 := TStringList.Create为每个列表键入。

我的想法是创建一个程序,该程序接受一个开放的变量数组,我的 4 个变量列表,然后将它们全部创建。电话会是这样的

但据我所知,您不能通过引用传递开放数组,因此不能做我希望的事情。有没有人对此有任何有趣的想法?

0 投票
3 回答
9559 浏览

string - 如何在 TVarRec 中设置字符串(或 AnsiString)常量?

我想将格式化参数传递给ArgsFormat函数。我找到了一些例子,但我不知道如何在TVarRec成员中分配字符串常量。以下代码在编译时失败E2089 Invalid typecast

谁能建议我如何将字符串(或 AnsiString)常量设置为 TVarRec 成员?我正在使用德尔福 2009。

非常感谢

0 投票
1 回答
2445 浏览

arrays - 需要包示例中的 Oracle 存储过程接受数组(表)参数

这个问题是我的问题的一部分,如何通过 ado 参数对象将 javascript 数组传递给 oracle 存储过程

我认为将它分成 3 个小部分会更快地得到答案。

对于这个问题。

我知道我们可以声明一个表类型并使用

但我总是从创建包含一个过程的新包中得到错误。我读到一些线程说我需要清除 sql(in schema) 类型,因为 sql 和 pl/slq 没有使用相同的引擎。我尝试通过 spl*plus 在模式中创建类型,但仍然出现相同的错误,所以我首先需要一个工作包示例。

0 投票
1 回答
464 浏览

delphi - 为什么我可以将 X 类型的 var 传递给该类型的开放数组参数?

使用 Delphi XE-2(已应用所有更新)。

我希望以下代码会在 DoSomething 和 DoInteger 调用上生成编译错误,但事实并非如此。

有人能解释一下为什么我可以将 FData/FInteger(都只是单个变量)传递给它们各自类型的开放数组参数,而无需将其放在[]'s 之间,并且编译器不会将其直接返回给我吗?

我认为它可能与接口数组甚至涉及的泛型有关,但编译器也接受传递给开放整数数组的整数。

0 投票
5 回答
616 浏览

arrays - 将静态数组转换为打开不同元素类型的数组

(我已经在CodeReview上问过这个问题,它在哪里被关闭为题外话。希望它在这里是题外话。)

我有一个派生类型的静态数组(如LabelsA: array[0..3] of TLabel;以下示例代码)和一个接受基本类型的开放数组(如procedure DoSomethingWithControls(const AControls: array of TControl);)的例程,我想DoSomethingWithControls用这些静态数组调用。请看我的样本:

有一些可能的调用变体DoSomethingWithControls

  • 变体 1 非常简单,但需要一个“适配器”类型,例如TArray1 每个大小的 TLabel 数组。我希望它更灵活。

  • 变体 2 更加灵活和统一,但丑陋且容易出错。

  • 变体 3(由 TOndrej提供)类似于变体 1 - 它不需要显式强制转换,但是如果您搞砸了一些事情(例如,在复制粘贴时弄错了数组边界),变体 1 会提供更多的编译器安全性。

有什么想法可以在没有这些缺点的情况下制定这些调用(不更改数组的元素类型)?它应该适用于 D2007 和 XE6。

0 投票
1 回答
147 浏览

delphi - 无法传递类型化的 char 数组来打开 char 数组?

在 Delphi 7 或 Delphi XE 下编译时,下面的代码会报错

根据Rudy的文章,应该允许将类型化数组传递给开放数组吗?

此外,为什么它不抱怨 'array of Boolean' 和 'TABoolean' ?

非常感谢您的帮助!

0 投票
1 回答
113 浏览

c++ - 将数组传递给C++中的函数时如何避免堆栈溢出?

我正在编写一个代码,通过将指针传递给第一个位置,将数组传递给函数。在函数中,使用了数组的一部分。这会产生不安全的情况,因为如果调用者函数没有正确猜测数组的最大大小,则被调用者函数可以写入超过数组大小并且可能发生堆栈溢出。我正在考虑一个解决方案,并考虑使用函数模板并将数组作为引用传递,如本示例所示。

修改数组.h

修改数组.cpp

主文件

我正在寻找一种对现有代码的侵入性最小的解决方案。这里我只需要添加一个模板语句,将参数从 double* 更改为引用,并插入一个 if 语句来检查大小。我不想进行重大的重写。另外,出于性能原因,我也不想使用动态分配、向量或 std::array。这是数值模拟代码中的低级函数,性能非常重要。有更好的解决方案吗?做我正在做的事有陷阱吗?

0 投票
1 回答
264 浏览

delphi - 将常量传递给作为记录的开放数组的函数参数

我有这样定义的记录:

我可以像这样初始化这种记录类型的常量:

现在我有一个函数,它采用这种记录类型的开放数组:

我可以使用与常量声明类似的语法来调用此函数吗?

这不起作用。我应该使用其他东西吗?

0 投票
0 回答
355 浏览

delphi - 使用开放数组参数时如何避免“E2251 对 'MyMethodName' 的模糊重载调用”?

有时,在将开放数组传递给重载方法时,我会收到“E2251 Ambiguous 重载调用‘MyMethodName’” 。

例子:

它产生以下错误:

[DCC 错误] Unit1.pas(37): E2251 对“测试”的模糊重载调用

直到现在,由于避免错误,我一直使用临时动态数组,但我觉得它不是很干净

有没有一种更简洁的方法可以帮助 Delphi 辨别接受开放数组参数的重载?