值限制错误详细信息


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

相关内容

  • 没有找到相关文章

最新更新