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 指出的那样
为什么这行不通?
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 指出的那样