Version française
Home     About     Download     Resources     Contact us    
Browse thread
about "new"
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: -- (:)
From: Francois Pessaux <pessaux@p...>
Subject: Re: about "new"

>  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) *)
;;