为什么在F#中将数组类型写成一个列表?
f#
具有以下内容:
let a = "hello world".Split(' ')
返回类型是一个字符串数组,但类型写为:
System.String[]
我不明白为什么:
- 你声明一个数组,
[| ... |]但它显示为[ ... ]类型 - 您声明了一个列表,
[ ... ]但它显示为x list类型
另一个例子:
([| 3 |]).GetType()
val it : System.Type =
System.Int32[]
为什么会这样?
回答
这种不一致可能是因为 F# 是一种 .NET 语言。
-
在 F# 中,您希望列表比数组更频繁,因此
[ ... ]对列表使用较短的语法而[| ... |]对数组使用较长的语法是有意义的。 -
在 .NET 中,数组类型被写为
System.Int32[]. 这是您从中得到的,GetTypeF# 无法覆盖它,因为它来自 .NET 库。 -
对于类型名,你可以随时使用
'a list和'a array如果你想明确写入类型。 -
最不一致的特性是您也可以编写数组类型,例如
int[]在 F# 中。我同意这令人困惑。我认为 F# 在这里只是采用了 C# 中使用的符号。但是,请注意,这也使您可以轻松定义多维数组,例如int[,]和int[,,]。我认为多维数组类型没有其他语法。