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问题有一个传统,包括"你尝试过什么",但我甚至不知道该尝试什么,这是一个概念性问题。。。
评论中的链接应该可以解决您的大部分问题。但是,您想用这段代码实现什么呢?你想要一个由100个空列表组成的数组吗?
事实上,makeArray ()
与empties
没有什么不同。如果你执行它,你会得到同样的错误消息:
错误FS0030:值限制。值"it"已推断为具有泛型类型val-it:"_a-list[]将"it"定义为一个简单的数据项,使其成为一个具有显式参数的函数,或者,如果您不打算要使其成为泛型,请添加一个类型注释。
这将创建一个由100个列表组成的数组:let mkArr2<'a> = Array.create<'a list> 100
类似,但默认值为0(但我去掉了[]列表参数):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