seq.nth和seq.item之间有什么区别?

时间:2018-04-17 22:03:32

标签: f#

查看Seq.nthSeq.item的MSDN文档,它们似乎完全相同。两者都有相同的描述... 计算集合中的第n个元素

有什么区别?如果没有,为什么两者都有?

2 个答案:

答案 0 :(得分:4)

不推荐使用nth的原因是Seq.nthList.nth的类型签名不同,so nth was deprecated in favor of item以避免混淆。 (在该文档中搜索单词“nth”以查找讨论)。在某些时候显然还有一个Array.nth函数,但它不再出现在MSDN上的F#文档中,所以我无法告诉你它的签名是什么。

Signature for Seq.nth

Seq.nth : int -> seq<'T> -> 'T

Signature for List.nth

List.nth : 'T list -> int -> 'T

请注意List.nth的定义方式,您无法someList |> List.nth 5Seq.nth以正确的顺序获取其参数,以便someSeq |> Seq.nth 5成为可能,但是让这两个函数以不同的顺序获取其参数会导致混淆。为了避免这种混淆,nth被弃用,并被item取代,someArray |> Array.item 5具有相同的列表,序列和数组签名。 (是的,someArray.[5]是可能的,即使您通常只是将其写为 headPort[i] = new MyList(i, nullptr)[cap]; // initialize all airports from newport[0] to newport[9] )。

答案 1 :(得分:3)

您可以在此处查看这些功能的源代码:https://github.com/fsharp/fsharp/blob/master/src/fsharp/FSharp.Core/seq.fs

[<CompiledName("Get")>]
let nth index (source : seq<'T>) = item index source

所以他们是一样的。