Types 如何使用堆栈初始化数组?
尝试:Types 如何使用堆栈初始化数组?,types,syntax,ocaml,Types,Syntax,Ocaml,尝试: let symbol_table = Array.make 256 Stack.create() 但是,我在创建数组时没有指定堆栈的类型,因此我想知道如何通过指定堆栈的类型来实现这一点。使用它时将推断出类型: let symbol_table = Array.make 256 (Stack.create ()) let () = Stack.push 4 symbol_table.(0) 但如果需要,也可以在let绑定上指定类型: let symbol_table : int Sta
let symbol_table = Array.make 256 Stack.create()
但是,我在创建数组时没有指定堆栈的类型,因此我想知道如何通过指定堆栈的类型来实现这一点。使用它时将推断出类型:
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 (fun _ -> Stack.create ())
如果执行Array.make 256(Stack.create())
,则将创建堆栈的一个实例,并将其分配给数组的每个元素。因此,Stack.push 4 symbol\u table.(0)
将一个符号推入所有256个堆栈
另请参阅相关的。注意,此代码创建了对同一堆栈的引用数组,这是有问题的,因为
stack.t
是一种可变数据类型Array.init 256(fun\ux->Stack.create())
避免了这个问题。
Array.init 256 (fun _ -> Stack.create ())