F# 中的类型化数组赋值

Typed Array assignment in F#

为什么这行不通?

open System
let ary = Array.create<Int16> 10
ary.[0] <- 42 // compiler error
printfn "%d" ary.[0] // compiler error

我得到的错误是这样的:

运算符 'expr.[idx]' 已根据此程序点之前的信息用于不确定类型的对象。考虑添加更多类型约束

Array.create<'T> 的签名是:

Array.create : int -> 'T -> 'T []

目前您只提供第一个参数(要创建的元素数)所以 ary 实际上是一个函数:Int16 -> Int16 []

您需要传递第二个参数,即用于数组中元素的值:

let ary = Array.create<Int16> 10 0s

如果您希望将类型的默认值用于数组中的所有元素(如上例所示),那么您可以使用 Array.zeroCreate 正如@Sehnsucht 指出的那样