Pergunta

Eu criei uma estrutura de dados mutáveis ??em OCaml, no entanto, quando eu ir para acessá-lo, ele dá um erro estranho,

Aqui está o meu 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};;

Quando eu fizer isso em ocaml de nível superior

let x = make _ vec _store;;

e, em seguida, tentar fazer x.size eu recebo este erro

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

O que é parece ser o problema? Eu não posso ver por que isso não iria funcionar.

Obrigado, Faisal

Foi útil?

Solução

make_vec_store é uma função. Quando você diz let x = make_vec_store, você está definindo x para ser essa função, assim como se você tivesse escrito let x = 1, que faria x o número 1. O que você deseja é o resultado de chamar essa função. Segundo a definição de make_vec_store, leva () (também conhecido como "unidade") como um argumento, então você escreveria let x = make_vec_store ().

Outras dicas

Tente x = make_ vec_store ()

Como seguimento ao excelente answere fornecido. Você pode dizer que o seu exemplo de linha:

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

retorna uma função como repl irá dizer-lhe isso. Você pode ver a saída que x é do tipo <fun> que não leva parâmetros unit e retorna um tipo vec_store.

Compare isso com a declaração

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

que lhe diz que x é do tipo int eo valor 1.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top