由于我通常使用VB.net作为选择的语言,所以我还没有应付yield
ing。现在我读到,他们也向VB.net引入了yield
ing,所以我尝试学习它,现在我有一个问题。
假设我有一个使用Iterator
ing的yield
函数。出于这个问题,我创建了这个相当无用的函数:
Public Iterator Function Test(ByVal gap As Integer) As IEnumerable(Of Integer)
Dim running As Integer
Do While running < (Integer.MaxValue - gap)
Yield running
running += gap
Loop
End Function
如果我对yield
的理解正确,那么代码将在yield
之后停止,并仅在要求下一项时继续。
因此,在我的示例中...如果获取running
变量的下一个值将需要1秒,那么如果我只需要第一个数字,则我的代码将只运行1秒,并且它将运行5秒如果我需要5个数字。
到目前为止,还不错,但是现在我想重载我的函数:
Public Function Test() As IEnumerable(Of Integer)
Return Test(1)
End Function
它不再是Iterator
函数了,所以我失去了只需要很多时间就不需要数字的优势吗?
答案 0 :(得分:2)
它不再是Iterator函数了,所以我失去了只需要很多时间就不需要数字的优势吗?
您没有。迭代器功能并不是万能的,它们所做的只是为您提供实现IEnumerable(Of T)
接口的便捷方法。因此,要获得仅产生所需值的优势,您所需要的只是一种返回该接口的良好实现的方法。那可能是以下任何一种:
Test(ByVal gap As Integer)
。Test()
。IEnumerable(Of T)
接口。