diff options
author | Neil Jerram <neil@ossau.uklinux.net> | 2006-09-27 17:49:38 +0000 |
---|---|---|
committer | Neil Jerram <neil@ossau.uklinux.net> | 2006-09-27 17:49:38 +0000 |
commit | 5695ccd43b051caf99f1ca94f00f7231c1466439 (patch) | |
tree | a9b05736de0b94f7a6d2d66c154abb96786fbe94 | |
parent | 94a2c24a6406c788ca295f7e738f55ffa44c8e45 (diff) | |
download | guile-5695ccd43b051caf99f1ca94f00f7231c1466439.tar.gz |
(Slot Options): Added example from Ludovic Courtès
about difference between init-value, -form and -thunk.
-rw-r--r-- | doc/goops/ChangeLog | 5 | ||||
-rw-r--r-- | doc/goops/goops.texi | 36 |
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 |