阅读用于导入的clojure API,我发现: ns宏中的import优先于import,但是当我使用swank/slime/emacs编码时,我不能c-x c-e the (ns ..)s-expression将dep放入repl中,但使用(import ...)我可以的。
原因是什么:导入比导入更好,有没有快速的方法从一个(ns ...)s-expr从我的.clj文件到repl?(同样的问题可以概括为:使用和:参考..谢谢)
发布于 2011-07-13 15:54:54
我不确定为什么c-x、c-e不能工作,但只要名称空间已经存在,ns表达式上的C-c、C-c就可以正常工作。
发布于 2011-07-20 19:42:53
(ns...)表单是首选,因为您的代码将更容易阅读。所有的名称空间声明都将被收集在文件的顶部。在Java等语言中,您可以看到这是由编译器强制执行的。此外,包含宏ns使您不再需要引用符号。use、import、refer等也是如此。
我认为C-x C-e slime快捷方式会将这段代码发送到连接的swank服务器,并对其进行评估。例如,表单:
(ns my.test
(:require [clojure.contrib.logging :as log])
(:import [java.io File]))将创建一个名为my.test的新名称空间,其中包括contrib日志记录和java.io文件。它不会更改repl的名称空间。为此,在您正在编辑的文件中按C-c M-p,系统将提示您输入要切换到的文件的名称空间的名称(除非您已经在该名称空间中)。按enter键选择。C-c C-z应该切换到repl。现在,您应该看到的不是user=>提示符,而是my.test=>,表示您位于该名称空间中。
我设置的工作流程是在保存时编译整个文件,使用:
(defun ed/clojure-compile-on-save (&optional args)
"Compile with slime on save"
(interactive)
(if (and (eq major-mode 'clojure-mode)
(slime-connected-p))
(slime-compile-and-load-file)))
(add-hook 'after-save-hook 'ed/clojure-compile-on-save)这样,当我保存文件时,它将由swank服务器编译和加载,并且我使用repl在我正在处理的名称空间中进行实验。
https://stackoverflow.com/questions/6673158
复制相似问题