前文再续,书接上一回……
话说上次我们已经实现了一个简单的骨架,它包括一个挂在REPL上面的钩子函数(ask函数)和入口函数(shell函数)。关于ask和shell,具体请参考这里。
首先为了显得更正式点,我们对shell函数作了一点小的修改:
(defn shell[& p]
(let [prompt (if (empty? p)
"myShell"
(first p))
exit-cmd #{
"8" "88" "quit" "q" "Q" "bye"}]
(loop [cmd (ask prompt)]
(if (exit-cmd cmd)
(println "get out!")
(do
(exec cmd)
(recur (ask prompt)))))))
跟上一篇的代码对比,我们主要修改/增加了退出命令,现在只要在我们的shell中输入("8" "88" "quit" "q" "Q" "bye")中的任意一个都会退出shell(*也许有人注意到我们没包括“exit”,因为“exit”在很多系统里面都