let empties = Array.create 100 []
给出值限制错误:
error FS0030: Value restriction. The value 'empties' has been inferred to have generic type val empties : '_a list []. Either define 'empties' as a simple data term, make it a function with explicit arguments or, if you do not intend for it to be generic, add a type annotation.
虽然这不是:
let makeArray () = Array.create 100 []
那有什么区别?我知道SO问题的传统包括“你尝试过的东西”,但我甚至不知道该尝试什么,这是一个概念性问题......
答案 0 :(得分:1)
评论中的链接应该清除您的大部分问题。但是你想用这段代码实现什么?你想要一个包含100个空列表的数组吗?
实际上makeArray ()
与empties
没有什么不同。如果执行它,您将收到相同的错误消息:
错误FS0030:值限制。值'it'已推断出来 有通用类型 val it:'_ a list []将'it'定义为一个简单的数据项,使其成为具有显式参数的函数,或者,如果您不打算 为了它是通用的,添加一个类型注释。
这将创建一个包含100个列表的数组:
let mkArr2<'a> = Array.create<'a list> 100
类似但默认值为0(但我摆脱了[] list参数):
let mkArr3<'a> = Array.zeroCreate<'a> 100
最后是一个空数组:
let mkArr4<'a> = Array.empty<'a>
或者使用传统的数组初始化语法可能是这样的:
let mkArr5<'a> = Array.init 100 (fun _ -> []:'a list)
对于您的具体示例,您只需添加泛型类型注释即可。如果您需要一系列列表/数组,请使用'a list
或'a array
let empties<'a> = Array.create<'a> 100