首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用ParamArray (vs变体数组)有什么好处?

使用ParamArray (vs变体数组)有什么好处?
EN

Stack Overflow用户
提问于 2014-03-17 20:50:58
回答 2查看 2.1K关注 0票数 4

当我想接受可变数量的参数时,我已经使用ParamArray语句多年了。一个很好的例子是这个MinVal函数:

代码语言:javascript
复制
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的情况下重写为:

代码语言:javascript
复制
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 提供一个令人信服的理由吗?

EN

回答 2

Stack Overflow用户

发布于 2014-03-17 21:16:09

我的大多数ParamArray函数都有std Array版本,可以像这样完成繁重的工作:

代码语言:javascript
复制
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对输出参数非常不方便。

票数 3
EN

Stack Overflow用户

发布于 2014-03-22 21:44:18

您已经注意到使用Paramarray的一个原因--有时它使代码更加清晰。事实上,我认为在你自己的例子中:

代码语言:javascript
复制
Debug.Print MinVal(10, 23, 4, 17)

比下列情况更可取:

代码语言:javascript
复制
Debug.Print MinVal(Array(10, 23, 4, 17))

当然,这是否“令人信服”是一个意见问题。在小型示例中,代码清晰度很少重要,但在大型代码库中,它可能是非常重要的。

如果您在Excel中使用VBA,那么使用ParamArray有一个很有说服力的理由。考虑以下形式的UDF:

代码语言:javascript
复制
Public Function mungeRanges(ParamArray ranges())
    'do something with a bunch of ranges
End Function

内置的Excel函数MIN实际上是这样工作的,您可以传递多个参数,包括范围或数组,并通过所有这些参数查找最小的单个值。任何遵循类似模式的东西都需要使用ParamArray

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

https://stackoverflow.com/questions/22465107

复制
相关文章

相似问题

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