F# 产量! (yieldbang) 运算符

问题描述 投票:0回答:1

我现在正在学习 F#,但我很难理解这一点:

let allPrimes =
let rec allPrimes' n = 
    seq {
        if isPrime n then
            yield n
        yield! allPrimes' (n + 1) }
allPrimes' 2

我无法弄清楚

yield!
运算符到底做了什么,即使我已经阅读了其他更简单的示例,并且似乎
yield!
返回了一个内部序列。

f# yield
1个回答
20
投票

yield bang 运算符将调用的序列表达式生成的子序列合并到最终序列中。或者用更简单的话来说:它“展平”返回的序列以将子序列的元素包含在最终序列中。

对于你的例子:如果没有yield bang运算符,你会得到类似的东西

{ prime1 { prime2 { prime3 .... }}}

使用yield bang操作符你会得到

{ prime1 prime2 prime3 ... }

其中每个

{
表示一个新序列。


旁注:我的第一个示例的实际结果甚至会包含更多序列,因为它将返回仅包含序列的序列,因为仅在

n is prime
时才返回素数。

© www.soinside.com 2019 - 2024. All rights reserved.