如何避免在Common Lisp中完成脚本?

时间:2016-01-28 14:56:58

标签: lisp common-lisp

我正在尝试学习Common Lisp,并找到了一个简单的网络服务器示例:

#!/usr/local/bin/sbcl --script
;;; The following lines added by ql:add-to-init-file:
#-quicklisp
(let ((quicklisp-init (merge-pathnames "quicklisp/setup.lisp"
                                       (user-homedir-pathname))))
  (when (probe-file quicklisp-init)
    (load quicklisp-init)))

(ql:quickload "cl-who")
(ql:quickload "hunchentoot")
(ql:quickload "parenscript")

(defpackage :vote
             (:use :cl :cl-who :hunchentoot :parenscript))

(in-package :vote)

(hunchentoot:start (make-instance 'hunchentoot:easy-acceptor :port 8080))

(hunchentoot:define-easy-handler (say-yo :uri "/yo") (name)
  (setf (hunchentoot:content-type*) "text/plain")
  (format nil "Hey~@[ ~A~]!" name))

我正在使用--script运行它,所以我可以迭代代码并继续测试。

问题是 - 脚本在启动服务器后立即完成,所以我无法测试它。

在我CTRL+D / CTRL+C之前,我怎样才能使程序继续运行?

可以使用类似loopsleep的内容,但这样做太麻烦 - 即积极等待。

1 个答案:

答案 0 :(得分:5)

如果您愿意使用 Ctrl-D ,则可以使用 - 加载代替 - 脚本来加载文件。加载文件后,您将被放入REPL中,您可以使用 Ctrl-D 退出。

虽然这可能是可行的,但考虑具有可在命令行上覆盖的默认参数的计时器也是有意义的,以便系统在一些到期时间后关闭。否则,您可能会无意中让Web服务器继续运行。