F#:在不使用 Seq.empty 的情况下编写空序列
F#: Compose empty sequence without using Seq.empty
我使用 F# 编写了自己的 LINQ 重新实现(感谢 Jon Skeet 的启发)。
我使用了一个技巧来生成空序列:
let empty<'b> =
seq {
for n = 0 to -1 do
yield Unchecked.defaultof<'b>
}
printfn "%A" empty<int> // -> seq []
有什么惯用的方法可以做到这一点吗?
(Seq.empty
没有用,我只是重新实现一下)
我能想到的使用序列表达式的最简单实现是:
let empty() = seq { do () }
或者,如果您想要通用值而不是函数:
let empty<'T> : seq<'T> = seq { do () }
人们只想为不产生任何值的序列表达式编写 seq { }
,但这在语法上是无效的,因此我们需要在其中做 something序列表达式。使用 do ()
只是告诉编译器这是一个语法上有效的序列表达式,在求值时它不执行任何操作(并且不产生任何值)。
我使用 F# 编写了自己的 LINQ 重新实现(感谢 Jon Skeet 的启发)。
我使用了一个技巧来生成空序列:
let empty<'b> =
seq {
for n = 0 to -1 do
yield Unchecked.defaultof<'b>
}
printfn "%A" empty<int> // -> seq []
有什么惯用的方法可以做到这一点吗?
(Seq.empty
没有用,我只是重新实现一下)
我能想到的使用序列表达式的最简单实现是:
let empty() = seq { do () }
或者,如果您想要通用值而不是函数:
let empty<'T> : seq<'T> = seq { do () }
人们只想为不产生任何值的序列表达式编写 seq { }
,但这在语法上是无效的,因此我们需要在其中做 something序列表达式。使用 do ()
只是告诉编译器这是一个语法上有效的序列表达式,在求值时它不执行任何操作(并且不产生任何值)。