From: Francois Pessaux <pessaux@pauillac.inria.fr>
To: Pierre.Casteran@labri.u-bordeaux.fr, caml-list@inria.fr
Subject: Re: about "new"
Date: Fri, 25 Jul 1997 12:02:05 +0200 [thread overview]
Message-ID: <199707251002.MAA12828@pauillac.inria.fr> (raw)
In-Reply-To: Your message of "Fri, 25 Jul 1997 11:09:04 +0200." <33D86D30.5889@labri.u-bordeaux.fr>
> Is there any way to define a class with some initializing function,
> which is to be called each time an instance is created by a "new" ;
> the interest would be of course to create a "consistent" state for
> a newly created object.
Just after the object creation ? For this I've no idea.
> Similarly, is it possible to attach a function to a class, which
> would be called before the creation of an instance ? it would be
> useful to check some preconditions to the creation of an instance.
> we can imagine that, if that function returns false, an exception
> is raised and the instance is not created.
For this, a solution would be to create a dummy value field whose value is
the code for your "constructor-function". For example :
class non_null_line x1 y1 x2 y2 val private assertion = if x1 = x2 && y1 = y2 then failwith "Null line"
val start_pt = (x1, y1)
val end_pt = (x2, y2)
...
end
;;
This class create line objets whith a non 0 length. Each time an object is
created, the value for private is computed, and if it goes wrong, an exception
is raised, avoiding the object creation.
We can "privatize" the "assertion" field in order to to see it in the class
type. In fact, this method depends on fields evaluation order of course...
So if you use side effets in previous fields, depending on the evaluation
order, they will be took in account or not. I know this solution ss a bit
hacking ;-)
--
(* Francois PESSAUX (Francois.Pessaux@inria.fr) *)
(* INRIA Rocquencourt - Projet CRISTAL *)
(* (http://pauillac.inria.fr/~pessaux) *)
;;
next prev parent reply other threads:[~1997-07-25 13:52 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
1997-07-25 9:09 Pierre CASTERAN
1997-07-25 10:02 ` Francois Pessaux [this message]
1997-07-25 11:54 ` Didier Remy
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=199707251002.MAA12828@pauillac.inria.fr \
--to=pessaux@pauillac.inria.fr \
--cc=Pierre.Casteran@labri.u-bordeaux.fr \
--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