Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linq F#:不使用Seq.empty编写空序列_Linq_F#_Sequence_Seq - Fatal编程技术网

Linq F#:不使用Seq.empty编写空序列

Linq F#:不使用Seq.empty编写空序列,linq,f#,sequence,seq,Linq,F#,Sequence,Seq,我用F#编写了我自己的LINQ重新实现(感谢Jon Skeet的灵感) 我使用一个技巧生成空序列: let empty<'b> = seq { for n = 0 to -1 do yield Unchecked.defaultof<'b> } printfn "%A" empty<int> // -> seq [] 让它为空 } printfn“%A”为空/->

我用F#编写了我自己的LINQ重新实现(感谢Jon Skeet的灵感)

我使用一个技巧生成空序列:

let empty<'b> =
        seq {
            for n = 0 to -1 do
                yield Unchecked.defaultof<'b>
        }

printfn "%A" empty<int> // -> seq []
让它为空
}
printfn“%A”为空/->seq[]
有什么惯用的方法可以做到这一点吗


Seq.empty
没有用,我只是重新实现它)

我能想到的使用序列表达式的最简单实现是:

let empty() = seq { do () }
或者,如果您想要通用值而不是函数:

let empty<'T> : seq<'T> = seq { do () }
let empty=seq{do()}

我们只需要为一个序列表达式编写
seq{}
,它不产生任何值,但在语法上是无效的,因此我们需要在序列表达式中做一些事情。使用
do()
只是告诉编译器这是一个语法有效的序列表达式,在求值时不做任何事情(也不产生任何值)

为什么
Seq.empty
不可用,而
Seq
生成器是空的?无论如何,您始终可以使用一个对象表达式,该表达式返回一个
IEnumerable
salso
[]:>'一个seq
[|]一个seq:>'一个seq
或任何类似的内容;)可以看出佳能的做法