F#中的类型化数组赋值

时间:2015-06-21 09:05:52

标签: arrays types f#

为什么这不起作用?

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

我得到的错误是:

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

1 个答案:

答案 0 :(得分:2)

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

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

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

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

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

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