|
|
<!-- Name: DescribeHook -->
|
|
|
<!-- Version: 1 -->
|
|
|
<!-- Last-Modified: 2008/03/18 15:16:38 -->
|
|
|
<!-- Author: anonymous -->
|
|
|
# What is a hook?
|
|
|
|
|
|
A hook in [CLFSWM](CLFSWM) is a function, a symbol, a list of functions or a list of symbols.
|
|
|
|
|
|
A function is called as is with parameters passed from call-hook.
|
|
|
|
|
|
A symbol function is called like a function.
|
|
|
|
|
|
If the hook is a list then functions or symbols are called in order.
|
|
|
|
|
|
Call-hook return the result of the last function executed in the hook.
|
|
|
|
|
|
For example:
|
|
|
|
|
|
```
|
|
|
(defun fun-1 (x y) (print (list 'fun-1 x y)))
|
|
|
(defun fun-2 (x y) (print (list 'fun-2 x y)))
|
|
|
(defun fun-3 (x y) (print (list 'fun-3 x y)))
|
|
|
|
|
|
(defvar *hook* #'fun-1)
|
|
|
(call-hook *hook* 10 20)
|
|
|
=> (FUN-1 10 20)
|
|
|
|
|
|
(setf *hook* 'fun-2)
|
|
|
(call-hook *hook* 10 30)
|
|
|
=> (FUN-2 10 30)
|
|
|
|
|
|
(setf *hook* (list 'fun-1 'fun-2 'fun-3))
|
|
|
(call-hook *hook* 10 "foo")
|
|
|
=> (FUN-1 10 "foo")
|
|
|
(FUN-2 10 "foo")
|
|
|
(FUN-3 10 "foo")
|
|
|
|
|
|
(setf *hook* (list #'fun-1 #'fun-2 #'fun-3))
|
|
|
(call-hook *hook* 10 "foo")
|
|
|
=> (FUN-1 10 "foo")
|
|
|
(FUN-2 10 "foo")
|
|
|
(FUN-3 10 "foo")
|
|
|
``` |