Node:Hook Reference,
Next:C Hooks,
Previous:Hook Example,
Up:Hooks
24.6.2 Hook Reference
When you create a hook with make-hook
, you must specify the arity
of the procedures which can be added to the hook. If the arity is not
given explicitly as an argument to make-hook
, it defaults to
zero. All procedures of a given hook must have the same arity, and when
the procedures are invoked using run-hook
, the number of
arguments passed must match the arity specified at hook creation time.
The order in which procedures are added to a hook matters. If the third
parameter to add-hook!
is omitted or is equal to #f
, the
procedure is added in front of the procedures which might already be on
that hook, otherwise the procedure is added at the end. The procedures
are always called from the front to the end of the list when they are
invoked via run-hook
.
The ordering of the list of procedures returned by hook->list
matches the order in which those procedures would be called if the hook
was run using run-hook
.
Note that the C functions in the following entries are for handling
Scheme-level hooks in C. There are also C-level hooks which
have their own interface (see C Hooks).
make-hook [n_args]
|
Scheme Procedure |
scm_make_hook (n_args)
|
C Function |
Create a hook for storing procedure of arity n_args.
n_args defaults to zero. The returned value is a hook
object to be used with the other hook procedures.
|
hook? x
|
Scheme Procedure |
scm_hook_p (x)
|
C Function |
Return #t if x is a hook, #f otherwise.
|
hook-empty? hook
|
Scheme Procedure |
scm_hook_empty_p (hook)
|
C Function |
Return #t if hook is an empty hook, #f
otherwise.
|
add-hook! hook proc [append_p]
|
Scheme Procedure |
scm_add_hook_x (hook, proc, append_p)
|
C Function |
Add the procedure proc to the hook hook. The
procedure is added to the end if append_p is true,
otherwise it is added to the front. The return value of this
procedure is not specified.
|
remove-hook! hook proc
|
Scheme Procedure |
scm_remove_hook_x (hook, proc)
|
C Function |
Remove the procedure proc from the hook hook. The
return value of this procedure is not specified.
|
reset-hook! hook
|
Scheme Procedure |
scm_reset_hook_x (hook)
|
C Function |
Remove all procedures from the hook hook. The return
value of this procedure is not specified.
|
hook->list hook
|
Scheme Procedure |
scm_hook_to_list (hook)
|
C Function |
Convert the procedure list of hook to a list.
|
run-hook hook . args
|
Scheme Procedure |
scm_run_hook (hook, args)
|
C Function |
Apply all procedures from the hook hook to the arguments
args. The order of the procedure application is first to
last. The return value of this procedure is not specified.
|
If, in C code, you are certain that you have a hook object and well
formed argument list for that hook, you can also use
scm_c_run_hook
, which is identical to scm_run_hook
but
does no type checking.
void scm_c_run_hook (SCM hook, SCM args)
|
C Function |
The same as scm_run_hook but without any type checking to confirm
that hook is actually a hook object and that args is a
well-formed list matching the arity of the hook.
|
For C code, SCM_HOOKP
is a faster alternative to
scm_hook_p
:
int SCM_HOOKP (x)
|
C Macro |
Return 1 if x is a Scheme-level hook, 0 otherwise.
|
24.6.3 Handling Scheme-level hooks from C code
Here is an example of how to handle Scheme-level hooks from C code using
the above functions.
if (SCM_NFALSEP (scm_hook_p (obj)))
/* handle Scheme-level hook using C functions */
scm_reset_hook_x (obj);
else
/* do something else (obj is not a hook) */