首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Emacs和Cider进行闭包编码

用Emacs和Cider进行闭包编码
EN

Stack Overflow用户
提问于 2015-02-05 16:22:23
回答 3查看 1.7K关注 0票数 4

我是Clojure编码的新手,我阅读了许多文章来设置Emacs以供开发。

安装本身按照设计工作,但我一直在运行来自Cider会话的服务器,并在进行任何代码更改时完全杀死Emacs。或者,我需要从shell会话中找到服务器进程,然后在那里终止它。这远非理想。

clojure-getting-started/web.clj

代码语言:javascript
复制
(defn -main [& [port]]
  (let [port (Integer. (or port (env :port) 5000))]
    (jetty/run-jetty (site #'app) {:port port :join? false})))

苹果酒会话

代码语言:javascript
复制
clojure-getting-started.web> (defonce server (-main))

启动服务器后,我将使用(server)函数获得以下错误:

代码语言:javascript
复制
1. Unhandled java.lang.ClassCastException
   org.eclipse.jetty.server.Server cannot be cast to clojure.lang.IFn

错误消息是有意义的,但是如何使用Emacs刷新我的代码库?

我想(并希望)有一个比在Emacs上启动shell会话并在那里终止进程更好的方法.

EN

回答 3

Stack Overflow用户

发布于 2015-02-08 01:11:18

假设您希望运行一个jetty服务器,并在从emacs中更改代码时让它加载或重新加载您的代码。虽然已经给出的建议是好的,但在开始的时候,它可能比你所需要的更复杂。我的建议是利用lein的一些模板,它将首先为您设置一个默认环境和工作流。然后,当您了解更多信息时,您可以改进此默认设置,直到得到适合您的工作流为止。我的建议是从默认的compojure模板开始,即

代码语言:javascript
复制
lein new compojure my-project

这就创建了一个基本的基本项目,包括基本的环和组合库、lein插件以及一个简单的dev配置文件。

编辑src/my_project/handler.clj文件并添加ring.middleware.reload中间件。

代码语言:javascript
复制
(ns my-project.handler
  (:require [compojure.core :refer :all]
            [compojure.route :as route]
            [ring.middleware.reload :refer [wrap-reload]]
            [ring.middleware.defaults :refer [wrap-defaults site-defaults]]))

(defroutes app-routes
  (GET "/" [] "Hello World")
  (route/not-found "Not Found"))

(def app
  (-> app-routes
      wrap-reload
      (wrap-defaults site-defaults)))

包装-重新加载中间件将导致您的代码在修改后重新加载。您不需要重新启动jetty服务器才能使代码更改生效--只需重新加载页面即可。

在终端运行

代码语言:javascript
复制
lein ring server

代码语言:javascript
复制
lein ring server-headless

这将启动一个监听端口3000的码头服务器。然后,从内部emacs,您可以打开苹果酒回购使用时,编写您的代码。除非对project.clj文件进行更改,否则不需要重新启动服务器进程。苹果酒的过程也是一样。

然后,一旦你对此感到满意,就看一下莱茵戒指的文档。在这里,您将找到有关如何在项目中设置repl.clj文件的信息。一旦你这样做了,你就可以做类似的事情了

代码语言:javascript
复制
lein repl

然后从内部做一些类似的事情

代码语言:javascript
复制
(start-server)

会启动服务器。然后,您可以切换到emacs,而不是运行苹果酒插孔,你可以做一个苹果酒连接,这将连接到他已经运行爬虫,而不是启动第二个回购会话。稍后,如果您决定也开始查看clojurescript,您可以查看一些clojure+clojurescript应用程序的默认模板。我很喜欢摆设和使用试剂,所以我也发现试剂模板相当好。

有相当多的lein模板在外面,我发现它真的很有用,只运行他们,看看他们做什么。然后,我倾向于选择我喜欢的特性/选项。

票数 3
EN

Stack Overflow用户

发布于 2015-02-07 09:05:18

这是我刚才给similar question的大部分答案

尝试(refresh)命名空间中的clojure.tools.namespace.repl函数:

refresh函数将扫描类路径上的所有目录以查找Clojure源文件,读取它们的ns声明,构建它们的依赖关系图,并按依赖关系顺序加载它们。

https://github.com/clojure/tools.namespace#reloading-code-usage

我们通常会向user命名空间添加一些其他有用的内容,因此在启动时将其加载到REPL中:

代码语言:javascript
复制
(ns user
  (:require [clojure.tools.namespace.repl :refer [refresh]]
            [clojure.repl :refer [doc source]]
            [clojure.pprint :refer [pprint pp]]
            [midje.repl :as midje]
            [clojure.stacktrace :as st]))

为了使代码与主源和测试源分离,将其放在<project root>/dev/user.clj的文件中,然后将以下内容添加到lein project.clj文件中:

代码语言:javascript
复制
:profiles {:dev {:source-paths ["dev"]}}
票数 1
EN

Stack Overflow用户

发布于 2015-02-15 14:21:52

关于ClassCastException -服务器需要有一个param函数:

代码语言:javascript
复制
(defonce server (fn [request] (-main)))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28348974

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档