使用Java的流API,可以像使用函数式内部迭代 迭代器一样对集合进行操作。
collection.forEach(out::println)
Swift的for-each循环结构是否有以下问题:...
for i in names {
println(i)
}
这只是一种内部(函数式)迭代的语法糖,可以用以下命令式for循环来解释:
for var i = 0; i < names.count; i++ {
println(names[i])
}
for
-in
循环中,会调用集合表达式的 generate()
方法来获取一个生成器类型的值,即符合 Generator
协议的类型。程序通过在流上调用 next()
方法开始执行循环。如果返回的值不是 None
,它将被赋值给 item 模式,程序执行相应的语句,然后继续执行循环的开头。否则,程序不进行赋值或执行语句,并且完成执行 for
-in
语句。for i in names {
println(i)
}
大致相当于
var g = names.generate() // "var" because next() is a mutating function
while let i = g.next() { // "let" pattern because next() returns an optional
println(i)
}
关于函数迭代,我们有SequenceType的func map<T>(_ transform: (Element) -> T) -> [T]
方法。