1
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 问题的传统包括“你尝试过什么”,但我什至不知道该尝试什么,这是一个概念性问题......

4

1 回答 1

1

评论中的链接应该可以解决您的大部分问题。但是你想用这段代码实现什么?你想要一个包含 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 listor'a array如果你想要一个列表/数组的数组。
let empties<'a> = Array.create<'a> 100

于 2017-01-08T05:25:01.343 回答