如何具体定义特定类型T的新数组?
奇怪的是,我找不到任何有用的信息..
我想写这样的东西:
let arr = new Array()
只有arr的元素必须是T类型。
我怎样才能在F#上做到?
答案 0 :(得分:3)
如果元素类型未知,则可以使用显式类型注释:
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)
答案 1 :(得分:2)
也许你可以尝试这样的事情。
let myStringArray : string array = Array.zeroCreate 10
let myIntArray : int array = Array.zeroCreate 10
let myCharArray : char array = Array.zeroCreate 10
在msdn上进行了描述。
答案 2 :(得分:2)
也许Array.init<'T>
和Array.create<'T>
功能正是您所需要的。
另请考虑使用Sequence
而不是数组。
序列是所有一种类型的逻辑系列元素。当您拥有大量有序的数据集但不一定希望使用所有元素时,序列特别有用。
答案 3 :(得分:2)
Automatic generalization和类型推断是您应该利用的强大功能。
创建数组时:
let arr = Array.zeroCreate 10
其类型为广义。在这种情况下,它被推断为'T[]
(尽可能通用)。
一旦你做了类似的事情:
let x = arr.[0] + 1
或
printfn "%s" arr.[0]
它可以分别推断具体类型(int[]
或string[]
)。
缺少显式类型使您的代码更清晰。保存类型注释以确定它们何时真正需要。