- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
是否可以将数组的所有元素传递给 ParamArray?
例如,我想将一个 ParamArray 传递给另一个 ParamArray:
Sub test()
p1 "test", "banane", "birne"
End Sub
Sub p1(ParamArray keys() As Variant)
p2 keys 'should be the same as: p2 "test", "banane", "birne"
End Sub
Sub p2(ParamArray keys() As Variant)
Dim key As Variant
For Each key In keys
Debug.Print key 'Run-time error '13' Type mismatch (key is an array)
Next key
End Sub
p2
的 ParamArray不包含
keys
的元素, 但它得到数组对象
keys
.因此,我必须检查是否传递了数组:
Sub test()
p1 "test", "banane", "birne"
p2 "test", "banane", "birne"
End Sub
Sub p1(ParamArray keys() As Variant)
p2 keys
End Sub
Sub p2(ParamArray params() As Variant)
Dim keys As Variant
If IsArray(params(0)) Then
keys = params(0)
Else
keys = params
End If
Dim key As Variant
For Each key In keys
Debug.Print key
Next key
End Sub
public class VarArgs {
public static void main(String[] args) {
p1("test", "banane", "birne");
p2("test", "banane", "birne");
String[] array = {"test", "banane", "birne"};
p1(array);
p2(array);
}
public static void p1(String... strings) {
p2(strings);
}
public static void p2(String... strings) {
for (String string : strings) {
System.out.println(string);
}
}
}
最佳答案
将 ParamArray 参数传递给另一个需要 ParamArray 参数的函数(委托(delegate) ParamArray 参数)。
我需要委托(delegate)给以下类型的函数:strf(str as string, ParamArray args() as Variant) as String
在 ParamArray 中的其他函数中接收到的参数直接传递而无需显式写入。
我发现的限制是:
Option Explicit
Option Base 1
Public Sub PrAr1(ParamArray pa1() As Variant)
Dim arr() As Variant
arr = fn.ParamArrayDelegated(pa1)
PrAr2 pa1
End Sub
Public Sub PrAr2(ParamArray pa2() As Variant)
Dim i As Integer, arrPrms() As Variant
arrPrms = fn.ParamArrayDelegated(pa2)
For i = 0 To UBound(arrPrms)
Debug.Print s.strf("i: %0 prm: %1 ", i, arrPrms(i))
Next i
PrAr3 pa2
End Sub
Public Sub PrAr3(ParamArray pa3() As Variant)
Dim i As Integer, arrPrms() As Variant
arrPrms = fn.ParamArrayDelegated(pa3)
For i = 0 To UBound(arrPrms)
Debug.Print s.strf("i: %0 prm: %1 ", i, arrPrms(i))
Next i
End Sub
Public Function ParamArrayDelegated(ParamArray prms() As Variant) As Variant
Dim arrPrms() As Variant, arrWrk() As Variant
'When prms(0) is Array, supposed is delegated from another function
arrPrms = prms
Do While VarType(arrPrms(0)) >= vbArray And UBound(arrPrms) < 1
arrWrk = arrPrms(0)
arrPrms = arrWrk
Loop
ParamArrayDelegated = arrPrms
End Function
关于vba - 将数组传递给 ParamArray,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20783170/
是否可以将数组的所有元素传递给 ParamArray? 例如,我想将一个 ParamArray 传递给另一个 ParamArray: Sub test() p1 "test", "banane
我使用 ParamArray 打开多个文件。 如何将工作簿分配给数组以单独访问它们?例如,获取每个工作簿的最后一行。 错误是 subscript out of range Sub main() Ca
如果我想通过数组为 ParamArray arglist 传递多个值,我该怎么做?从我目前阅读的内容来看,在 VBA 上,我似乎需要明确列出我想要传递的值。但是,如果可能有不同数量的值要传递,所以我事
我想创建一个几乎与 SumIfs 完全相同的函数,但我很难弄清楚如何处理 ParamArray 部分。我正在寻找一种解决方案,它允许与 sum ifs 相同的 Range1,Criteria1,Ran
我有一个像这样暴露给 COM 的类库: Public Class SomeClass Public Const ClassId As String = "GUID1" Public
在 this question 的上下文中被发现这看似 不一致的行为可以在 F#2.0 和 F#3.0 RC 中重现如下: type Heterogeneous = static member
我曾经拥有的: Public Sub Subscribe(channel As ChannelType) Public Sub Subscribe(channels As IEnumerable(Of
我想设计一个接受任意数量的 bool 条件并将它们添加到 IF 语句中的 Function 或 Sub。我想象的代码是这样的: Function comp (ParamArray list() As
我正在编写一个函数来在工作簿的所有工作表上运行一些宏,排除的工作表列表除外。我将排除工作表的列表作为 ParamArray 传递,但在对照 ParamArray 中的列表检查当前工作表时遇到问题。 P
我想知道是否可以在方法中将列表传递给 ParamArray 的参数?对于前。 dt = ws.getTable("baseDivision.code:1", "countryCode:CA",
我正在尝试编写一个函数来计算一个邮政编码到另一个邮政编码的最小距离。该函数应获取一个邮政编码的经度和纬度,然后是一个包含所有邮政编码的经度和纬度信息的二维数组。这是我写的函数: Public Func
我正在尝试构建一个 UDF,它将接受 ParamArray,该 ParamArray 将接受一个单元格、一系列单元格和/或直接值。然后我需要循环遍历 ParamArray 以获取传递的所有值,但是当我
我想在我的函数中包含一个 ParamArray,但到目前为止我的努力失败了。 假设我想构建一个函数来计算离散分布的平均值。 该函数具有以下形式: Function Dist_Discrete(X1,
最终编辑:它确实似乎是一个编译器错误 - 请参阅已接受的答案。 在 Excel 2007 中使用 VBA,我在“Class1”中有以下代码: Option Explicit Public Functi
当使用ParamArray并通过它传递数组元素时,我注意到VBA中有一个奇怪的地方。在某些情况下,到达函数的不是数组元素的值,而是 var 指针。 (Excel 2016,32 位)。 经过一番苦苦挣
我用过 ParamArray多年来,我想接受可变数量的参数。一个很好的例子是这个 MinVal 函数: Function MinVal(ParamArray Values() As Variant)
一些预定义的方法包含 ParamArray在他们的签名中。 但是,委托(delegate)不能在其签名中包含 ParamArray。 问题:假设您希望为需要 ParamArray 的特定方法创建委托(
受 Max()/Min() 中的 Javascript 变量参数和函数式语言中的列表理解的启发,我尝试使用通用扩展方法在 VB.NET 中获得相同的结果类型,给定 IEnumerable(of T)
在 F# 中,如何柯里化(Currying)一个接受可变数量参数的函数? 我有这样的代码...(日志函数只是一个示例,具体实现并不重要) let log (msg : string) = pr
我是一名优秀的程序员,十分优秀!