Version française
Home     About     Download     Resources     Contact us    
Browse thread
[Caml-list] Ocaml 3.07+2: no support for optional arguments to classes
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: -- (:)
From: Basile Starynkevitch <basile.starynkevitch@i...>
Subject: Re: [Caml-list] Ocaml 3.07+2: no support for optional arguments to classes
On Thu, Oct 23, 2003 at 12:37:37PM +0200, Alex Baretta wrote:
> I am unable to get the following code to compile.
> 
> class xcaml_conf : ?string -> ?xcaml_configuration -> 
> Netcgi_types.cgi_activation ->
> object
>   method config : xcaml_configuration
>   method cgi : # Xcaml_cgi.xcaml_cgi_activation
>   method mem : Parse_config.varname -> bool
>   method argument_value : Parse_config.varname -> string
> end
> 

Probably better to ask in:

> Beginner's list: http://groups.yahoo.com/group/ocaml_beginners

Your syntax is wrong: your code is a module interface (ie a signature).
Syntax is similar to declaration of functional types.

The following example compile and works as expected:

(**** file test.mli *****)
class class_with_option : ?name: string -> int -> object 
  method print: unit 
  method descr: string
end;;
(**** end of file test.mli ****)

Compile it with ocamlc -c -g test.mli



(**** file test.ml ****)
class class_with_option ?(name="??") num = object
  val _num : int = num
  method print = Printf.printf "in class_with_option name=%S num=%d\n%!" name _num
  method descr = Printf.sprintf "<class_with_option name=%S num=%d>" name _num
  method private othermeth = _num + 1
end;;

let c1 = new class_with_option ~name: "obj_1" 1;;

let c2 = new class_with_option 2;;

c1#print;;

c2#print;;
(**** end of test.ml ******)

Compile it with ocamlc -c -g test.ml -o _test
and run it with _test.

In a few words, code your interface with:

class xcaml_conf : ?name: string -> ?config: xcaml_configuration -> 
  Netcgi_types.cgi_activation ->
   object
    method config : xcaml_configuration
    method cgi : # Xcaml_cgi.xcaml_cgi_activation
    method mem : Parse_config.varname -> bool
    method argument_value : Parse_config.varname -> string
  end

An additional hint is: avoid reusing names from Pervasives (like int) as
optional labels. Even if it is permitted, I believe it is errorprone.

Regards.
-- 
Basile STARYNKEVITCH -- basile dot starynkevitch at inria dot fr
Project cristal.inria.fr - 
http://cristal.inria.fr/~starynke --- all opinions are only mine 

-------------------
To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr
Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners