summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNeil Jerram <neil@ossau.uklinux.net>2006-09-27 17:49:38 +0000
committerNeil Jerram <neil@ossau.uklinux.net>2006-09-27 17:49:38 +0000
commit5695ccd43b051caf99f1ca94f00f7231c1466439 (patch)
treea9b05736de0b94f7a6d2d66c154abb96786fbe94
parent94a2c24a6406c788ca295f7e738f55ffa44c8e45 (diff)
downloadguile-5695ccd43b051caf99f1ca94f00f7231c1466439.tar.gz
(Slot Options): Added example from Ludovic Courtès
about difference between init-value, -form and -thunk.
-rw-r--r--doc/goops/ChangeLog5
-rw-r--r--doc/goops/goops.texi36
2 files changed, 39 insertions, 2 deletions
diff --git a/doc/goops/ChangeLog b/doc/goops/ChangeLog
index f9c43e60b..22a5c82c2 100644
--- a/doc/goops/ChangeLog
+++ b/doc/goops/ChangeLog
@@ -1,3 +1,8 @@
+2006-09-27 Neil Jerram <neil@ossau.uklinux.net>
+
+ * goops.texi (Slot Options): Added example from Ludovic Courtès
+ about difference between init-value, -form and -thunk.
+
2006-04-21 Kevin Ryde <user42@zip.com.au>
* hierarchy.pdf: New file, converted from hierarchy.eps using
diff --git a/doc/goops/goops.texi b/doc/goops/goops.texi
index 171ac2bfa..d6d8e595d 100644
--- a/doc/goops/goops.texi
+++ b/doc/goops/goops.texi
@@ -838,8 +838,40 @@ value (shared across all new instances of the class).
when a new instance is created and should return the desired initial
slot value. @var{init-form} is an unevaluated expression that gets
evaluated when a new instance is created and should return the desired
-initial slot value. @var{init-keyword} is a keyword that can be used to
-pass an initial slot value to @code{make} when creating a new instance.
+initial slot value. @var{init-keyword} is a keyword that can be used
+to pass an initial slot value to @code{make} when creating a new
+instance.
+
+Note that, since an @code{init-value} value is shared across all
+instances of a class, you should only use it when the initial value is
+an immutable value, like a constant. If you want to initialize a slot
+with a fresh, independently mutable value, you should use
+@code{init-thunk} or @code{init-form} instead. Consider the following
+example.
+
+@example
+(define-class <chbouib> ()
+ (hashtab #:init-value (make-hash-table)))
+@end example
+
+@noindent
+Here only one hash table is created and all instances of
+@code{<chbouib>} have their @code{hashtab} slot refer to it. In order
+to have each instance of @code{<chbouib>} refer to a new hash table, you
+should instead write:
+
+@example
+(define-class <chbouib> ()
+ (hashtab #:init-thunk make-hash-table))
+@end example
+
+@noindent
+or:
+
+@example
+(define-class <chbouib> ()
+ (hashtab #:init-form (make-hash-table)))
+@end example
If more than one of these options is specified for the same slot, the
order of precedence, highest first is