我有一个function startButton_Callback(~, ~, handles)
h = animatedline;
%// Store the handle within the appdata of the figure
setappdata(gcbf, 'MyAnimatedLine', h)
la = newClass;
addlistener(la,'statusAnnouncement',@StatusListener);
end
function StatusListener(obj, evnt)
%// Get the handle from the appdata of the figure
h = getappdata(gcbf, 'MyAnimatedLine');
h.addpoints(evnt.coordinate(1), evnt.coordinate(2))
end
的小项目,我正在攻击emacs,cider和nREPL。在~/src/proj/{foo,bar}.clj
我做bar.clj
,我希望(def base-13-joke 42)
中的代码引用foo.clj
的{{1}}。我该怎么做?
我当前的类路径(bar.clj
= base-13-joke
)
~/src/proj
我尝试/jonas/src/mine/code/move-the-box
似乎没有效果,以及/home/jonas/src/mine/code/move-the-box/target/classes
/home/jonas/.m2/repository/cider/cider-nrepl/0.11.0/cider-nrepl-0.11.0.jar
/home/jonas/.m2/repository/org/tcrawley/dynapath/0.2.3/dynapath-0.2.3.jar
/home/jonas/.m2/repository/org/clojure/tools.nrepl/0.2.12/tools.nrepl-0.2.12.jar
/home/jonas/.m2/repository/clojure-complete/clojure-complete/0.2.4/clojure-complete-0.2.4.jar
/home/jonas/.m2/repository/org/clojure/clojure/1.8.0/clojure-1.8.0.jar
/usr/lib/jvm/java-7-openjdk-amd64/lib/tools.jar
抛出(add-classpath "file:///jonas/src/mine/code/move-the-box")
。那里发生了什么?
答案 0 :(得分:4)
如果您将多个Clojure源文件作为单个项目使用,那么使用Leiningen或Boot等构建工具可以获得很多好处。例如,以下是如何使用多个源文件创建名为myproject
的简单Boot项目。
首先,使用以下内容创建一个myproject
目录(无论在哪里):
myproject
├── build.boot
└── src
└── myproject
├── bar.clj
└── foo.clj
引导将在它执行任何其他操作之前运行您的build.boot
文件(例如,运行您的一些代码,创建JAR或启动REPL)。现在,您只需告诉Boot,您的源文件将位于src
目录中,因此只需将此行添加到build.boot
:
(set-env! :source-paths #{"src"})
在bar.clj
中,从其他代码中输入您要访问的定义:
(ns myproject.bar)
(def base-13-joke 42)
然后,在foo.clj
中,您可以使用bar.clj
声明中的:require
条款引用ns
:
(ns myproject.foo
(:require [myproject.bar :as bar]))
(defn make-joke []
(println (Long/toString bar/base-13-joke 13)))
这就是它的全部!当然,你可能想要用你刚才编写的代码实际做。引导通过任务处理“服务”。让我们编写一个只运行项目中的一个函数的文件。
如果要定义要使用Boot运行的任务,可以通过添加代码将该任务定义到build.boot
文件来实现。首先,由于我们将调用一些主要代码(在本例中为make-joke
命名空间中的myproject.foo
函数),我们需要require
码。将此行添加到build.boot
:
(require '[myproject.foo :as foo])
现在我们可以定义一个简单的run
任务(同样,在build.boot
中)将运行我们的函数:
(deftask run []
(with-pass-thru _
(foo/make-joke)))
with-pass-thru
业务只与Boot中的一些具体任务有关,您可以详细了解here。
执行任务非常简单。从项目根目录的命令行运行:
$ boot run
33
Boot还附带了一些内置任务。例如,如果您运行boot repl
,您将在boot.user
命名空间中看到熟悉的REPL提示符:
boot.user=>
此命名空间与Boot执行build.boot
脚本的命名空间相同,因为require
中的myproject.foo
build.boot
,我们可以使用该命名空间REPL:
boot.user=> (foo/make-joke)
33
nil
当然,您也可以require
其他名称空间:
boot.user=> (require '[myproject.bar :as bar])
nil
boot.user=> bar/base-13-joke
42
您可以使用Boot执行更多操作,例如重新加载代码并与CIDER交互,您可以在Boot Wiki中阅读所有内容。