长话短说,C# 2.0中的Iterator语法实际上就是取代自己写一个IEnumerator实现的麻烦,它的语法比较简明,大大提高了编码效率,示例如下:

}

在Boo中,这种IEnumerator的功能是通过Generator来实现的,而且有三种Generator语法形式:

  • Generator Expression
  • Generator Method
  • List Comprehension

其实这三种形式都差不多,下面我们来看个实际的例子。这里假设我们要创建一个Stack类,要为这个Stack提供遍历功能,以下依次展示C# 2.0以及Boo三种形式的Generator的实现示例:

C# 2.0

}

Generator Expression

Iterator = Generators??# 因为Generator并不是IEnumerator类型,所以需要调用Generator的GetEnumerator方法。
Iterator = Generators??def GetEnumerator() 
as IEnumerator:
Iterator = Generators??   
return (item for item in self.items.Reversed).GetEnumerator()

Generator Method

Iterator = Generators??# 就像你所看到的,Generator Method与C# 2.0的语法差不多。
Iterator = Generators??def Iterator():
Iterator = Generators??   
for item in self.items.Reversed:
Iterator = Generators??      yield item

List Comprehension

Iterator = Generators??# 这里返回的就不是Generator类型了,而是一个List,
Iterator = Generators??# 等于把Generator转换成List。
Iterator = Generators??def GetItems() 
as List:
Iterator = Generators??   
return [item for item in self.items.Reversed]

其实这个语法很简单,不过Generator真正好用的地方在于它同时支持表达式与条件,比如我想取出所有增大后不大于100的元素,那么我可以这样写Generator:

Iterator = Generators??generator = item for Increase(item) in items if item <= 100

总的来说,Boo的Generator语法要比C#的灵活些,不过并不是能做什么C#做不到的事情或者很复杂的事情,这些简便的语法也是充分吸取了Python的优点。

相关文章:

  • 2022-01-15
  • 2022-12-23
  • 2021-09-26
  • 2022-01-09
  • 2022-12-23
  • 2021-05-25
  • 2022-01-28
猜你喜欢
  • 2021-11-10
  • 2021-12-02
  • 2022-12-23
  • 2021-11-11
  • 2022-12-23
  • 2021-06-16
相关资源
相似解决方案