如何专门定义特定类型 T 的新数组?
奇怪的是,我找不到任何有用的信息。
我想写这样的东西:
let arr = new Array()
只是 arr 的元素必须是 T 类型。
我怎样才能在 F# 上做到这一点?
也许Array.init<'T>
andArray.create<'T>
函数是您正在寻找的。
还可以考虑使用 aSequence
而不是数组。
序列是一种类型的元素的逻辑系列。当您拥有大量有序的数据集合但不一定希望使用所有元素时,序列特别有用。
如果元素的类型未知,您可以使用显式类型注释:
let arrayOfTenZeroes = Array.zeroCreate<int> 10
let emptyIntArray: int array = [||]
当您使用Array module中的高阶函数时,您不必这样做,因为类型检查器会自动推断元素的类型:
// arr is inferred as int array
let arr = Array.init 10 (fun i -> i+1)
也许你可以尝试这样的事情。
let myStringArray : string array = Array.zeroCreate 10
let myIntArray : int array = Array.zeroCreate 10
let myCharArray : char array = Array.zeroCreate 10
它在msdn上进行了描述。
自动泛化和类型推断是您应该利用的重要功能。
创建数组时:
let arr = Array.zeroCreate 10
它的类型是广义的。在这种情况下,它被推断为'T[]
(尽可能一般)。
一旦你做了类似的事情:
let x = arr.[0] + 1
或者
printfn "%s" arr.[0]
它可以推断出具体类型(int[]
或string[]
,分别)。
缺少显式类型使您的代码更加简洁。保存类型注释以供真正需要时使用。