Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
What's new
10
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Open sidebar
emacs
emacs
Commits
8bab07bc
Commit
8bab07bc
authored
Apr 13, 2015
by
Stefan Monnier
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
* doc/misc/eieio.texi: Don't advertize now obsolete constructs
parent
5729f459
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
38 additions
and
75 deletions
+38
-75
doc/misc/eieio.texi
doc/misc/eieio.texi
+32
-75
etc/NEWS
etc/NEWS
+6
-0
No files found.
doc/misc/eieio.texi
View file @
8bab07bc
...
...
@@ -140,13 +140,13 @@ constructor. The constructor is a function with the same name as your
class which returns a new instance of that class. Here is an example:
@example
(setq rec (record
"Eric"
:name "Eric" :birthday "June" :phone "555-5555"))
(setq rec (record :name "Eric" :birthday "June" :phone "555-5555"))
@end example
@noindent
The first argument is the name given to this instance. Each instanc
e
is
given
a name, so different instances can be easily distinguished
when debugging.
For backward compatibility reasons, the first argument can be a string (a nam
e
given
to this instance). Each instance used to be given a name, so different
instances could be easily distinguished
when debugging.
It can be a bit repetitive to also have a :name slot. To avoid doing
this, it is sometimes handy to use the base class @code
{
eieio-named
}
.
...
...
@@ -244,7 +244,7 @@ EIEIO does not support it.
This CLOS method tag is non-functional.
@item :default-initargs in @code
{
defclass
}
Each slot
has
an @code
{
:init
arg
}
tag, so this is not really necessary.
Each slot
can have
an @code
{
:init
form
}
tag, so this is not really necessary.
@item Mock object initializers
Each class contains a mock object used for fast initialization of
...
...
@@ -266,10 +266,9 @@ To create a new class, use the @code{defclass} macro:
@defmac defclass class-name superclass-list slot-list
&
rest options-and-doc
Create a new class named @var
{
class-name
}
. The class is represented
by a self-referential symbol with the name @var
{
class-name
}
. @eieio
{}
stores the structure of the class as a symbol property of
@var
{
class-name
}
(@pxref
{
Symbol Components,,,elisp,GNU Emacs Lisp
Reference Manual
}
).
by a symbol with the name @var
{
class-name
}
. @eieio
{}
stores the structure of
the class as a symbol property of @var
{
class-name
}
(@pxref
{
Symbol
Components,,,elisp,GNU Emacs Lisp Reference Manual
}
).
The @var
{
class-name
}
symbol's variable documentation string is a
modified version of the doc string found in @var
{
options-and-doc
}
.
...
...
@@ -292,17 +291,12 @@ or @code{:protection}.
@end defmac
@noindent
Whenever defclass is used to create a new class, two predicates are
created for it, named @code
{
@var
{
CLASS-NAME
}
-p
}
and
@code
{
@var
{
CLASS-NAME
}
-child-p
}
:
Whenever defclass is used to create a new class, a predicate is
created for it, named @code
{
@var
{
CLASS-NAME
}
-p
}
:
@defun CLASS-NAME-p object
Return @code
{
t
}
if @var
{
OBJECT
}
is of the class @var
{
CLASS-NAME
}
.
@end defun
@defun CLASS-NAME-child-p object
Return @code
{
t
}
if @var
{
OBJECT
}
is of the class @var
{
CLASS-NAME
}
,
or is of a subclass of @var
{
CLASS-NAME
}
.
Return non-@code
{
nil
}
if and only if @var
{
OBJECT
}
is of the class
@var
{
CLASS-NAME
}
.
@end defun
@defvar eieio-error-unsupported-class-tags
...
...
@@ -418,7 +412,7 @@ Valid tags are:
@table @code
@item :initarg
A symbol that can be used in the argument list of the constructor to
specify a value for the new instance being created.
specify a value for
this slot of
the new instance being created.
A good symbol to use for initarg is one that starts with a colon @code
{
:
}
.
...
...
@@ -428,13 +422,13 @@ The slot specified like this:
@end example
could then be initialized to the number 1 like this:
@example
(myobject
"name"
:myslot 1)
(myobject :myslot 1)
@end example
@xref
{
Making New Objects
}
.
@item :initform
A expression used as the default value for this slot.
A
n
expression used as the default value for this slot.
If @code
{
:initform
}
is left out, that slot defaults to being unbound.
It is an error to reference an unbound slot, so if you need
...
...
@@ -445,19 +439,13 @@ Use @code{slot-boundp} to test if a slot is unbound
(@pxref
{
Predicates
}
). Use @code
{
slot-makeunbound
}
to set a slot to
being unbound after giving it a value (@pxref
{
Accessing Slots
}
).
The value passed to initform
is
automatically quoted. Thus,
The value passed to initform
used to be
automatically quoted. Thus,
@example
:initform (1 2 3)
@end example
appears as the specified list in the default object.
A symbol that is a function like this:
@example
:initform +
@end example
will set the initial value as that symbol.
After a class has been created with @code
{
defclass
}
, you can change
that default value with @code
{
oset-default
}
. @ref
{
Accessing Slots
}
.
will use the list as a value. This is incompatible with CLOS (which would
signal an error since 1 is not a valid function) and will likely change in the
future, so better quote your initforms if they're just values.
@item :type
An unquoted type specifier used to validate data set into this slot.
...
...
@@ -669,7 +657,7 @@ can do any valid Lispy thing you want with it, such as
Example of creating an object from a class:
@example
(record
"test"
:value 3 :reference nil)
(record :value 3 :reference nil)
@end example
@end defun
...
...
@@ -692,15 +680,6 @@ for each slot. For example:
(make-instance @code
{
'foo
}
@code
{
:slot1
}
value1 @code
{
:slotN
}
valueN)
@end example
Compatibility note:
If the first element of @var
{
initargs
}
is a string, it is used as the
name of the class.
In @eieio
{}
, the class' constructor requires a name for use when printing.
@dfn
{
make-instance
}
in CLOS doesn't use names the way Emacs does, so the
class is used as the name slot instead when @var
{
initargs
}
doesn't start with
a string.
@end defun
@node Accessing Slots
...
...
@@ -717,14 +696,9 @@ This macro sets the value behind @var{slot} to @var{value} in
@end defmac
@defmac oset-default class slot value
This macro sets the
@code
{
:initform
}
for
@var
{
slot
}
in @var
{
class
}
to
This macro sets the
value for the class-allocated
@var
{
slot
}
in @var
{
class
}
to
@var
{
value
}
.
This allows the user to set both public and private defaults after the
class has been constructed, and provides a way to configure the
default behavior of packages built with classes (the same way
@code
{
setq-default
}
does for buffer-local variables).
For example, if a user wanted all @code
{
data-objects
}
(@pxref
{
Building
Classes
}
) to inform a special object of his own devising when they
changed, this can be arranged by simply executing this bit of code:
...
...
@@ -737,16 +711,12 @@ changed, this can be arranged by simply executing this bit of code:
@defmac oref obj slot
@anchor
{
oref
}
Retrieve the value stored in @var
{
obj
}
in the slot named by @var
{
slot
}
.
Slot is the name of the slot when created by @dfn
{
defclass
}
or the label
created by the @code
{
:initarg
}
tag.
Slot is the name of the slot when created by @dfn
{
defclass
}
.
@end defmac
@defmac oref-default
obj
slot
@defmac oref-default
class
slot
@anchor
{
oref-default
}
Gets the default value of @var
{
obj
}
(maybe a class) for @var
{
slot
}
.
The default value is the value installed in a class with the @code
{
:initform
}
tag. @var
{
slot
}
can be the slot name, or the tag specified by the @code
{
:initarg
}
tag in the @dfn
{
defclass
}
call.
Get the value of the class-allocated @var
{
slot
}
from @var
{
class
}
.
@end defmac
The following accessors are defined by CLOS to reference or modify
...
...
@@ -812,7 +782,7 @@ Where each @var{var} is the local variable given to the associated
variable name of the same name as the slot.
@example
(defclass myclass () (x :init
arg
1))
(defclass myclass () (x :init
form
1))
(setq mc (make-instance 'myclass))
(with-slots (x) mc x) => 1
(with-slots ((something x)) mc something) => 1
...
...
@@ -986,15 +956,14 @@ allows the first argument to be cast.
@section Static Methods
Static methods do not depend on an object instance, but instead
operate on a
n object's
class. You can create a static method by using
operate on a class. You can create a static method by using
the @code
{
:static
}
key with @code
{
defmethod
}
.
Do not treat the first argument of a @code
{
:static
}
method as an
object unless you test it first. Use the functions
@code
{
oref-default
}
or @code
{
oset-default
}
which will work on a class,
or on the class of an object.
The first argument of a @code
{
:static
}
method will be a class rather than an
object. Use the functions @code
{
oref-default
}
or @code
{
oset-default
}
which
will work on a class.
A
C
lass' @code
{
constructor
}
method is defined as a @code
{
:static
}
A
c
lass'
s
@code
{
make-instance
}
method is defined as a @code
{
:static
}
method.
@b
{
Note:
}
The @code
{
:static
}
keyword is unique to @eieio
{}
.
...
...
@@ -1085,13 +1054,6 @@ For example:
Will fetch the documentation string for @code
{
eieio-default-superclass
}
.
@end defun
@defun class-constructor class
Return a symbol used as a constructor for @var
{
class
}
. The
constructor is a function used to create new instances of
@var
{
CLASS
}
. This function provides a way to make an object of a class
without knowing what it is. This is not a part of CLOS.
@end defun
@defun eieio-object-name obj
Return a string of the form @samp
{
#<object-class myobjname>
}
for @var
{
obj
}
.
This should look like Lisp symbols from other parts of Emacs such as
...
...
@@ -1105,11 +1067,6 @@ information into the symbol.
Returns the class symbol from @var
{
obj
}
.
@end defun
@defun eieio--object-class obj
Same as @code
{
eieio-object-class
}
except this is a macro, and no
type-checking is performed.
@end defun
@defun eieio-object-class-name obj
Returns the symbol of @var
{
obj
}
's class.
@end defun
...
...
@@ -1267,7 +1224,7 @@ Return the list of public slots for @var{obj}.
@end defun
@defun class-slot-initarg class slot
For the given @var
{
class
}
return
the
:initarg associated with
For the given @var
{
class
}
return
an
:initarg associated with
@var
{
slot
}
. Not all slots have initargs, so the return value can be
@code
{
nil
}
.
@end defun
...
...
@@ -1612,7 +1569,7 @@ is a list of name/value pairs. These are actually just passed to
Sets slots of @var
{
obj
}
with @var
{
slots
}
which is a list of name/value
pairs.
This is called from the default
@code
{
constructor
}
.
This is called from the default constructor.
@end defun
@node Basic Methods
...
...
etc/NEWS
View file @
8bab07bc
...
...
@@ -271,13 +271,19 @@ the old behavior -- *shell* buffer displays in current window -- use
** EIEIO
+++
*** The `:protection' slot option is not obeyed any more.
+++
*** The `newname' argument to constructors is optional&deprecated.
If you need your objects to be named, do it by inheriting from `eieio-named'.
+++
*** The <class>-list-p and <class>-child-p functions are declared obsolete.
+++
*** The <class> variables are declared obsolete.
+++
*** The <initarg> variables are declared obsolete.
*** defgeneric and defmethod are declared obsolete.
+++
*** `constructor' is now an obsolete alias for `make-instance'.
** ido
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment