Subject: Re: Q: example usage of EVAL-WHEN
From: Erik Naggum <erik@naggum.net>
Date: 30 Oct 2000 10:45:37 +0000
Newsgroups: comp.lang.lisp
Message-ID: <3181891537734338@naggum.net>

* xenophon@irtnog.org (Xenophon Fenderson the Carbon(d)ated)
| I have text parsing code that looks something like the following:
| 
|   (defparameter *the-default-macro-table* (make-hash-table))
| 
|   ;; here is some code to initialize *the-default-macro-table*
|   (setf (gethash #\a *the-default-macro-table*) #'process-\a)
|   (setf (gethash #\b *the-default-macro-table*) #'process-\b)

  If these pieces of code are always executed together, it would
  perhaps look better if you did something like this:

(defparameter *the-default-macro-table*
    (let ((hash-table (make-hash-table)))
      (setf (gethash #\b hash-table) #'process-\b)
      (setf (gethash #\b hash-table) #'process-\b)
      hash-table))

| I would like the hash table (along with its initial entries) to be
| re-created each time the file is loaded.

  This is what defparameter does.

| Do I have to use EVAL-WHEN to get the behavior I want?

  No.

| When should I use EVAL-WHEN?
| 
| When shouldn't I use EVAL-WHEN?

  These are almost impossibly broad questions.

  You should use eval-when when evaluation is to occur at other times
  than the defaults.  You should not use eval-when when the default is
  sufficient or if you don't understand when to use eval-when...

#:Erik
-- 
  Does anyone remember where I parked Air Force One?
                                   -- George W. Bush