【发布时间】:2023-03-10 21:15:01
【问题描述】:
在许多语言中,可以检查一个对象是否是可迭代的,我如何为 VBA 做到这一点?
我可以试试:
Function isIterable(obj As Variant) As Boolean
On Error Resume Next
Dim iterator As Variant
For Each iterator In obj
Exit For
Next
isIterable = Err.Number = 0
End Function
但我想知道是否有内置或更好的方法?
【问题讨论】:
-
请注意,虽然您的函数支持数组,但数组应该使用
For循环而不是For Each进行迭代(出于重要的性能原因)。调用代码应改为使用IsArray测试该变体。 -
但由于他只是迭代列表中的第一个项目来测试可迭代性(现在是一个词!),这并不重要,@Mat'sMug。
-
@FreeMan 不在 that 函数中 - 但如果某些代码正在调用此函数以发现是否可以使用
For Each循环迭代某些内容,并且该函数需要一个数组并说“是的,当然没问题”,那么假设调用代码将分支到For Each循环似乎是合理的,无论obj是什么。如果那是一个数组,那么它的效率就太低了。 -
所以,@Mat'sMug,一旦确定对象是可迭代的,就应该进一步测试它是否是一个数组,然后正确循环,而不是测试“那个变体”用
IsArray代替".