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
next prev parent 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).