尝试:
let symbol_table = Array.make 256 Stack.create()
但是,我在创建数组时没有指定堆栈的类型,所以我想知道如何通过指定堆栈的类型来实现这一点。
答案 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 ())