如何使用堆栈初始化数组?

时间:2017-11-01 02:28:35

标签: types syntax ocaml

尝试:

let symbol_table = Array.make 256 Stack.create()

但是,我在创建数组时没有指定堆栈的类型,所以我想知道如何通过指定堆栈的类型来实现这一点。

2 个答案:

答案 0 :(得分:2)

您应该使用Array.init创建不同堆栈实例的数组

Array.init 256 (fun _ -> Stack.create ())

如果你要Array.make 256 (Stack.create ()),那么你将创建一个堆栈实例,并将其分配给数组的每个元素。因此Stack.push 4 symbol_table.(0)会将符号推入所有256个堆栈。

另请参阅相关的answer

答案 1 :(得分:1)

使用时会推断出类型:

let symbol_table = Array.make 256 (Stack.create ())
let () = Stack.push 4 symbol_table.(0)

但是如果需要,还可以在let绑定上指定类型:

let symbol_table : int Stack.t array = Array.make 256 (Stack.create ())

编辑:如评论中所述,您应该使用Array.init来使用256个单独的实例初始化数组,而不是对同一堆栈实例的256个引用进行初始化。得到Array.make

let symbol_table : int Stack.t array = Array.init 256 (fun _ -> Stack.create ())