caml-list - the Caml user's mailing list
 help / color / mirror / Atom feed
From: Basile Starynkevitch <basile.starynkevitch@inria.fr>
To: Alex Baretta <alex@baretta.com>
Cc: caml-list@inria.fr
Subject: Re: [Caml-list] Ocaml 3.07+2: no support for optional arguments to classes
Date: Thu, 23 Oct 2003 14:11:23 +0200	[thread overview]
Message-ID: <20031023121123.GA28879@bourg.inria.fr> (raw)
In-Reply-To: <3F97AF71.4020202@baretta.com>

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


  reply	other threads:[~2003-10-23 12:11 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2003-10-23 10:37 Alex Baretta
2003-10-23 12:11 ` Basile Starynkevitch [this message]
2003-10-23 15:47   ` Alex Baretta

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20031023121123.GA28879@bourg.inria.fr \
    --to=basile.starynkevitch@inria.fr \
    --cc=alex@baretta.com \
    --cc=caml-list@inria.fr \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).