F# - 什么是array<'T>?

6
在这个之前的问题中,我了解到在F#中,array<'T>System.Array不同。
VS告诉我,array<'T>继承了System.Array,并且完整名称为Microsoft.FSharp.Core.array<_>,还有一些额外的接口。
然而,MSDN表示,array<'T>System.Array的类型缩写。它使用arr.[i]来获取和设置项。
所以,在我的教训中,array<'T>是一个包含类型扩展和其他接口的类型缩写吗?在哪里查找最好?

另请参阅此线程 https://twitter.com/_cartermp/status/1509946503682396162 - Goswin Rothenthal
1个回答

12

类型array<'T>是一个缩写,但并不是基本类型System.Array的缩写,而是代表F#中数组的另一种泛型类型,写作'T[]

这意味着:

  • System.Array是非泛型的基础类型(您不能使用索引,并且只能获取对象作为元素)

  • 'T[]array<'T>完全相同。它们是支持索引的泛型类型,您可以从中获取'T值。


1
还要注意,泛型类型可以写在类型之前且不需要使用尖括号,因此您可以编写 string array,这样读起来非常好;比 array <string>string [] 好得多。 - Jwosty
我怎样能对[]进行类型扩展? type Microsoft.FSharp.Collections.Array with member arr.last with get() = arr.[arr.Length -1] 对我不起作用。 - Goswin Rothenthal
有关类型扩展,请参见:https://dev59.com/B3XYa4cB1Zd3GeqP__Hb - Goswin Rothenthal

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接