Thanks, I get it now !

Cheers

Gabriel

2012/3/13 Samuel Hornus <samuel.hornus@inria.fr>

On Mar13, 2012, at 11:49 , Gabriel Cardoso wrote:

> Dear list,
>
> I have empty arguments when using Arg.Tuple with references. This minimalist example illustrates my problem :
>
> let f a b =
>   print_endline a;
>   print_endline b
>
> let s = ref ""
>
> let speclist = [(
>   "-a",
>   Arg.Tuple [
>     Arg.Set_string s;
>     Arg.String (f !s) (* !s is empty !!! *)

Here, the value of !s is empty when the (f !s) is evaluated…
you shoud pass the whole reference as argument :
Arg.String(f s)
and
let f a b = print_endline !a; print_endline b

>     (* Arg.String (fun ss -> f !s ss) (\* Works just fine ... why ? *\) *)

why ? because the !s here is evaluated only later, whenthe anonymous function is applied.
--
Sam