mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-05-01 04:10:18 +02:00
Merge small sections into `GOOPS Object Miscellany'
* doc/ref/goops.texi (GOOPS Object Miscellany): New section, combining previous `Object Comparison', `Cloning Objects' and `Write and Display'. Replace `Object Comparison' text with something that makes sense. Add a snippet to the end of the write/display section.
This commit is contained in:
parent
5f9b75a355
commit
2cb8cf04b9
1 changed files with 75 additions and 81 deletions
|
@ -45,13 +45,11 @@ module. You can do this at the Guile REPL by evaluating:
|
||||||
* Methods and Generic Functions::
|
* Methods and Generic Functions::
|
||||||
* Inheritance::
|
* Inheritance::
|
||||||
* Introspection::
|
* Introspection::
|
||||||
|
* GOOPS Object Miscellany::
|
||||||
* Class Options::
|
* Class Options::
|
||||||
* Redefining a Class::
|
* Redefining a Class::
|
||||||
* Changing the Class of an Instance::
|
* Changing the Class of an Instance::
|
||||||
* GOOPS Error Handling::
|
* GOOPS Error Handling::
|
||||||
* Object Comparisons::
|
|
||||||
* Cloning Objects::
|
|
||||||
* Write and Display::
|
|
||||||
* The Metaobject Protocol::
|
* The Metaobject Protocol::
|
||||||
@end menu
|
@end menu
|
||||||
|
|
||||||
|
@ -1626,6 +1624,80 @@ function with arguments @var{class} and @var{slot-name}.
|
||||||
@end deffn
|
@end deffn
|
||||||
|
|
||||||
|
|
||||||
|
@node GOOPS Object Miscellany
|
||||||
|
@section GOOPS Object Miscellany
|
||||||
|
|
||||||
|
Here we cover some points about GOOPS objects that aren't substantial
|
||||||
|
enough to merit sections on their own.
|
||||||
|
|
||||||
|
@subheading Object Equality
|
||||||
|
|
||||||
|
When GOOPS is loaded, @code{eqv?}, @code{equal?} and @code{=} become
|
||||||
|
generic functions, and you can define methods for them, specialized for
|
||||||
|
your own classes, so as to control what the various kinds of equality
|
||||||
|
mean for your classes.
|
||||||
|
|
||||||
|
For example, the @code{assoc} procedure, for looking up an entry in an
|
||||||
|
alist, is specified as using @code{equal?} to determine when the car of
|
||||||
|
an entry in the alist is the same as the key parameter that @code{assoc}
|
||||||
|
is called with. Hence, if you had defined a new class, and wanted to
|
||||||
|
use instances of that class as the keys in an alist, you could define a
|
||||||
|
method for @code{equal?}, for your class, to control @code{assoc}'s
|
||||||
|
lookup precisely.
|
||||||
|
|
||||||
|
@subheading Cloning Objects
|
||||||
|
|
||||||
|
@deffn generic shallow-clone
|
||||||
|
@deffnx method shallow-clone (self <object>)
|
||||||
|
Return a ``shallow'' clone of @var{self}. The default method makes a
|
||||||
|
shallow clone by allocating a new instance and copying slot values from
|
||||||
|
self to the new instance. Each slot value is copied either as an
|
||||||
|
immediate value or by reference.
|
||||||
|
@end deffn
|
||||||
|
|
||||||
|
@deffn generic deep-clone
|
||||||
|
@deffnx method deep-clone (self <object>)
|
||||||
|
Return a ``deep'' clone of @var{self}. The default method makes a deep
|
||||||
|
clone by allocating a new instance and copying or cloning slot values
|
||||||
|
from self to the new instance. If a slot value is an instance
|
||||||
|
(satisfies @code{instance?}), it is cloned by calling @code{deep-clone}
|
||||||
|
on that value. Other slot values are copied either as immediate values
|
||||||
|
or by reference.
|
||||||
|
@end deffn
|
||||||
|
|
||||||
|
@subheading Write and Display
|
||||||
|
|
||||||
|
@deffn {primitive generic} write object port
|
||||||
|
@deffnx {primitive generic} display object port
|
||||||
|
When GOOPS is loaded, @code{write} and @code{display} become generic
|
||||||
|
functions with special methods for printing
|
||||||
|
|
||||||
|
@itemize @bullet
|
||||||
|
@item
|
||||||
|
objects - instances of the class @code{<object>}
|
||||||
|
|
||||||
|
@item
|
||||||
|
foreign objects - instances of the class @code{<foreign-object>}
|
||||||
|
|
||||||
|
@item
|
||||||
|
classes - instances of the class @code{<class>}
|
||||||
|
|
||||||
|
@item
|
||||||
|
generic functions - instances of the class @code{<generic>}
|
||||||
|
|
||||||
|
@item
|
||||||
|
methods - instances of the class @code{<method>}.
|
||||||
|
@end itemize
|
||||||
|
|
||||||
|
@code{write} and @code{display} print non-GOOPS values in the same way
|
||||||
|
as the Guile primitive @code{write} and @code{display} functions.
|
||||||
|
@end deffn
|
||||||
|
|
||||||
|
In addition to the cases mentioned, you can of course define
|
||||||
|
@code{write} and @code{display} methods for your own classes, to
|
||||||
|
customize how they are printed.
|
||||||
|
|
||||||
|
|
||||||
@node Class Options
|
@node Class Options
|
||||||
@section Class Options
|
@section Class Options
|
||||||
|
|
||||||
|
@ -1893,84 +1965,6 @@ The default methods all call @code{goops-error} with an appropriate
|
||||||
message.
|
message.
|
||||||
@end deffn
|
@end deffn
|
||||||
|
|
||||||
@node Object Comparisons
|
|
||||||
@section Object Comparisons
|
|
||||||
|
|
||||||
@deffn generic eqv?
|
|
||||||
@deffnx method eqv? ((x <top>) (y <top>))
|
|
||||||
@deffnx generic equal?
|
|
||||||
@deffnx method equal? ((x <top>) (y <top>))
|
|
||||||
@deffnx generic =
|
|
||||||
@deffnx method = ((x <number>) (y <number>))
|
|
||||||
Generic functions and default (unspecialized) methods for comparing two
|
|
||||||
GOOPS objects.
|
|
||||||
|
|
||||||
The default method for @code{eqv?} returns @code{#t} for all values
|
|
||||||
that are equal in the sense defined by R5RS and the Guile reference
|
|
||||||
manual, otherwise @code{#f}. The default method for @code{equal?}
|
|
||||||
returns @code{#t} or @code{#f} in the sense defined by R5RS and the
|
|
||||||
Guile reference manual. If no such comparison is defined,
|
|
||||||
@code{equal?} returns the result of a call to @code{eqv?}. The
|
|
||||||
default method for = returns @code{#t} if @var{x} and @var{y} are
|
|
||||||
numerically equal, otherwise @code{#f}.
|
|
||||||
|
|
||||||
Application class authors may wish to define specialized methods for
|
|
||||||
@code{eqv?}, @code{equal?} and @code{=} that compare instances of the
|
|
||||||
same class for equality in whatever sense is useful to the
|
|
||||||
application. Such methods will only be called if the arguments have
|
|
||||||
the same class and the result of the comparison isn't defined by R5RS
|
|
||||||
and the Guile reference manual.
|
|
||||||
@end deffn
|
|
||||||
|
|
||||||
@node Cloning Objects
|
|
||||||
@section Cloning Objects
|
|
||||||
|
|
||||||
@deffn generic shallow-clone
|
|
||||||
@deffnx method shallow-clone (self <object>)
|
|
||||||
Return a ``shallow'' clone of @var{self}. The default method makes a
|
|
||||||
shallow clone by allocating a new instance and copying slot values from
|
|
||||||
self to the new instance. Each slot value is copied either as an
|
|
||||||
immediate value or by reference.
|
|
||||||
@end deffn
|
|
||||||
|
|
||||||
@deffn generic deep-clone
|
|
||||||
@deffnx method deep-clone (self <object>)
|
|
||||||
Return a ``deep'' clone of @var{self}. The default method makes a deep
|
|
||||||
clone by allocating a new instance and copying or cloning slot values
|
|
||||||
from self to the new instance. If a slot value is an instance
|
|
||||||
(satisfies @code{instance?}), it is cloned by calling @code{deep-clone}
|
|
||||||
on that value. Other slot values are copied either as immediate values
|
|
||||||
or by reference.
|
|
||||||
@end deffn
|
|
||||||
|
|
||||||
@node Write and Display
|
|
||||||
@section Write and Display
|
|
||||||
|
|
||||||
@deffn {primitive generic} write object port
|
|
||||||
@deffnx {primitive generic} display object port
|
|
||||||
When GOOPS is loaded, @code{write} and @code{display} become generic
|
|
||||||
functions with special methods for printing
|
|
||||||
|
|
||||||
@itemize @bullet
|
|
||||||
@item
|
|
||||||
objects - instances of the class @code{<object>}
|
|
||||||
|
|
||||||
@item
|
|
||||||
foreign objects - instances of the class @code{<foreign-object>}
|
|
||||||
|
|
||||||
@item
|
|
||||||
classes - instances of the class @code{<class>}
|
|
||||||
|
|
||||||
@item
|
|
||||||
generic functions - instances of the class @code{<generic>}
|
|
||||||
|
|
||||||
@item
|
|
||||||
methods - instances of the class @code{<method>}.
|
|
||||||
@end itemize
|
|
||||||
|
|
||||||
@code{write} and @code{display} print non-GOOPS values in the same way
|
|
||||||
as the Guile primitive @code{write} and @code{display} functions.
|
|
||||||
@end deffn
|
|
||||||
|
|
||||||
@node The Metaobject Protocol
|
@node The Metaobject Protocol
|
||||||
@section The Metaobject Protocol
|
@section The Metaobject Protocol
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue