Pregunta

He creado un mutable estructura de datos en OCaml, sin embargo cuando voy a acceder a él, da un error extraño,

Aquí está mi código

type vector = {a:float;b:float};;
type vec_store = {mutable seq:vector array;mutable size:int};;

let max_seq_length = ref 200;;

exception Out_of_bounds;;
exception Vec_store_full;;

let vec_mag {a=c;b=d} = sqrt( c**2.0 +. d**2.0);;


let make_vec_store() = 
    let vecarr = ref ((Array.create (!max_seq_length)) {a=0.0;b=0.0}) in
         {seq= !vecarr;size=0};;

Cuando hago esto en ocaml de nivel superior

let x = make _ vec _store;;

y, a continuación, intente hacer x.size Me sale este error

Error: This expression has type unit -> vec_store
       but an expression was expected of type vec_store

Cuál parece ser el problema?No puedo ver por qué esto no iba a funcionar.

Gracias, Faisal

¿Fue útil?

Solución

make_vec_store es una función. Cuando dices let x = make_vec_store, estás configurando x para que sea esa función, al igual que si hubieras escrito let x = 1, eso haría que x sea el número 1. Lo que quieres es el resultado de llamar esa función Según la definición de (), se necesita let x = make_vec_store () (también conocido como & Quot; unit & Quot;) como argumento, por lo que debería escribir <=>.

Otros consejos

prueba x = make_ vec_store ()

Como seguimiento a la excelente respondemos siempre.Se puede decir que su línea de ejemplo:

# let x = make_vec_store;;
val x : unit -> vec_store = <fun>

devuelve una función como la repl diré esto.Usted puede ver en la salida que x es de tipo <fun> que no toma parámetros unit y devuelve un tipo de vec_store.

Contraste esto con la declaración

# let x = 1;;
val x : int = 1

lo cual nos indica que x es de tipo int y el valor 1.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top