生成序列有几种方法,先来看一下我们的选择,直接的方法是实现IEnumerator <T> 接口,提供 Current 属性,和 MoveNext方法,将枚举数对象移动到下一个元素。这要求显式创建有可变状态的对象,很明显违反了函数式风格。通常的做法是隐藏可变性,提供更具声明式的方法,表达生成序列的内容,这类似于在前一章使用的延迟值。显式使用可变状态(例如,实现缓存),看起来不是很好的函数式风格,但我们把可变性隐藏到Lazy<‘T> 类型中,就获得了完全合理的函数式代码。
通常,在函数式编程中,我们可以使用高阶函数。F# 库提供了不少的函数处理序列,但我们只看一个例子。后面我们会看到,C# 和F# 都有简单的方法来生成序列,在C# 中,我们可以使用迭代,F# 提供了通用目的的序列处理功能,称为序列表达式(sequence expressions)。
时间: 2024-11-06 09:37:47