Question

J'ai créé une structure de données modifiable dans OCaml. Cependant, lorsque je vais y accéder, cela donne une erreur étrange,

Voici mon code

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};;

Quand je fais cela dans ocaml top-level

let x = make _ vec _store;;

puis essayez de faire x.size je reçois cette erreur

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

Quel est le problème? Je ne vois pas pourquoi cela ne fonctionnerait pas.

Merci, Faisal

Était-ce utile?

La solution

make_vec_store est une fonction. Lorsque vous dites let x = make_vec_store, vous définissez x comme étant cette fonction, comme si vous aviez écrit let x = 1, cela ferait x le nombre 1. Ce que vous voulez est le résultat d'un appel cette fonction. Selon la définition de (), il prend let x = make_vec_store () (également connu sous le nom & "Unité &";) En argument, vous écrivez donc <=>.

Autres conseils

essayez x = make_vec_store ()

Pour donner suite à l’excellente réponse fournie. Vous pouvez dire que votre exemple de ligne:

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

retourne une fonction car le remplaçant vous le dira. Vous voyez dans la sortie que x est du type <fun> qui ne prend aucun paramètre unit et renvoie un type vec_store.

Comparez cela à la déclaration

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

qui vous dit que x est de type int et de valeur 1.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top