当我想接受可变数量的参数时,我已经使用ParamArray语句多年了。一个很好的例子是这个MinVal函数:
Function MinVal(ParamArray Values() As Variant)
Dim ReturnVal As Variant, v As Variant
If UBound(Values) < 0 Then
ReturnVal = Null
Else
ReturnVal = Values(0)
For Each v In Values
If v < ReturnVal Then ReturnVal = v
Next v
End If
MinVal = ReturnVal
End Function
' Debug.Print MinVal(10, 23, 4, 17)
' 4这可以在没有ParamArray的情况下重写为:
Function MinVal(Optional Values As Variant)
Dim ReturnVal As Variant, v As Variant
If IsMissing(Values) Or IsNull(Values) Then
ReturnVal = Null
Else
ReturnVal = Values(0)
For Each v In Values
If v < ReturnVal Then ReturnVal = v
Next v
End If
MinVal = ReturnVal
End Function
' Debug.Print MinVal(Array(10, 23, 4, 17))
' 4注在第二个示例中,在调用Array()时使用了MinVal函数。
第二种方法的优点是能够将参数数组传递给另一个也接受数组的函数。如果我希望能够将MinVal中的参数数组传递给其他函数,这就提供了灵活性。
我已经开始认为我应该一直支持这种方法,并且完全停止使用ParamArray。
有人可能会说,使用ParamArray可以使代码更显式可读性。但是,编译时检查没有好处,因为ParamArray必须是一个变体数组。任何人都能给ParamArray**?** use 提供一个令人信服的理由吗?
发布于 2014-03-17 21:16:09
我的大多数ParamArray函数都有std Array版本,可以像这样完成繁重的工作:
Private Sub Command2_Click()
Process 1, 2, 3
End Sub
Private Sub Process(ParamArray A() As Variant)
ProcessArray CVar(A)
End Sub
Private Sub ProcessArray(B As Variant)
Debug.Print UBound(B)
End Sub但是,这并不适用于输出参数,所以是的,用ParamArray替换Array对输出参数非常不方便。
发布于 2014-03-22 21:44:18
您已经注意到使用Paramarray的一个原因--有时它使代码更加清晰。事实上,我认为在你自己的例子中:
Debug.Print MinVal(10, 23, 4, 17)比下列情况更可取:
Debug.Print MinVal(Array(10, 23, 4, 17))当然,这是否“令人信服”是一个意见问题。在小型示例中,代码清晰度很少重要,但在大型代码库中,它可能是非常重要的。
如果您在Excel中使用VBA,那么使用ParamArray有一个很有说服力的理由。考虑以下形式的UDF:
Public Function mungeRanges(ParamArray ranges())
'do something with a bunch of ranges
End Function内置的Excel函数MIN实际上是这样工作的,您可以传递多个参数,包括范围或数组,并通过所有这些参数查找最小的单个值。任何遵循类似模式的东西都需要使用ParamArray。
https://stackoverflow.com/questions/22465107
复制相似问题