提前为这一堆相关问题的有些散漫的性质道歉;我希望这些答案将成为Clojure新来者的有用资源。
我刚刚开始学习Clojure,部分原因是这篇文章。我不是一个专业的开发人员,但我有几十年的编程经验(ARexx,VB/VBScript/VBA,然后是Perl和2011年开始的R的日常使用)。我的平台是Windows 7 64位。我在Java1.7上使用Emacs 24.3、苹果酒20131221和Leiningen 2.3.3。0_45Java热点64位服务器。我已经买了Clojurehtml" target="_blank">编程和Clojure数据分析食谱,并尝试了两者。我发现他们很有前途,但我迷失在细节中。
显然,要做的事情是陷入并尝试代码练习和小任务,但对我来说,直接的问题是在Clojure中构建、组织甚至简单运行项目的复杂性。有了R,我可以摆脱一个包含大量代码的纯文本文件,也许还有一两个包含大型项目的通用函数的文件。
Clojure是非常不同的,由于没有Java方面的经验,我正在努力将这些部分组合起来。Clojure Programming有一整章都是关于组织和构建项目的,但它太全面了,因此我发现现在很难梳理出与我相关的信息。我想我正在寻找类似于Swank的答案,但从那时起,这些工具似乎已经开始发展了。这就来了。
项目。clj
包含项目定义和依赖项的文件。我想我明白了。我是否可以将此文件用于defproject
下与定义无关的代码,或者最好保持此文件不变,并将代码本身放在不同的clj
文件中
@Igrapentin的回答很棒。这里有一些其他的想法。
关于命名空间,本教程非常棒。
只是想澄清一下,re#2:不,不要只是把。clj文件位于项目下的任何位置。它们必须位于src/下,或者位于项目中:源路径
之后的向量中列出的任何目录(作为字符串)中。clj,如果该条目存在。然后在创建名称空间名称时去掉初始路径。这让我发疯,直到我明白过来。(了解更多的人,如果这里有不正确的地方,请纠正我。)
1#3,你需要IGraphenThin的答案,但是为什么不从评估REPL中的表达式开始呢?我断断续续地在一个项目上工作了几个星期,它做了很多,但是我的
-main
函数仍然没有做任何事情。我只是运行我正在做的任何部分。嗯,你已经习惯了有完全操作提示的语言——你决定吧。
编辑:无论您是否定义了
-main
函数来做任何事情,您也可以将: use
或:要求
关键字放在为同一文件定义命名空间的ns
语句中。当您使用lein repl
启动REPL时,这些将自动被调用,因此您通过ns
关键字提供的任何内容都将在REPL中可用。这样,您就可以使用以前的工作,但是您可以在REPL中以不同的方式处理它。(此外,如果您不喜欢自动加载的文件的默认名称,您可以使用: main
project.clj重新定义它。伊格瑞森暗示了这一点。)
:source path
中指定与src
不同的源目录
项目中的-main
函数。core
,但您可以在项目中指定各种不同的配置。clj
require
是首选:use
导入命名空间的所有public,除非您将其与:only
结合使用。Require让我们使用别名作为整个命名空间的:as
,但是您可以通过使用:仅使用:refere
获得相同的效果。请注意,在ClojureScript:不使用:甚至不允许仅使用
这是正常的。还有其他组合,例如C-C-k
来重新加载缓冲区的整个文件。如果您发现自己在REPL中输入了太多表单,而希望在单独的缓冲区中编辑它们https://www.refheap.com/22235.
我喜欢尝试用动词而不是名词来命名名称空间,例如,我更喜欢myproject。解析
,myproject。在我的项目上解释
。解析器
,myproject。口译员
等,但这是个人风格的问题。编辑:是的,通过名称空间的文件名和源文件开头的ns
表单显式定义名称空间的命名。由多个源文件定义一个名称空间是不常见的
我喜欢你“担心”的方式。你会(希望)发现Clojure,尤其是Leiningen在这些问题上几乎没有废话。
关于REPL的使用:我在@Mars-answer下看到了你的评论,你想以一种可以重复使用你输入内容的方式使用REPL。两件事:
C-xc-
,以将点处的表单粘贴到nrepl中并进行评估。安装说明位于链接中(您的.emacs文件通常位于主目录中)
问题内容: 假设我有3张桌子,每张桌子都与另一张桌子相关, 当我需要从每个表中获取一列时,如何组织(内部联接)会有所不同吗? 换句话说,我可以将(table2)放在(From)之后吗? 问题答案: 对于大多数查询,顺序无关紧要。 INNER JOIN既具有关联性又具有可交换性,因此表顺序无关紧要 SQL是声明性的。也就是说,定义查询的方式不是优化器的工作方式。它不会像您编写时那样逐行执行。 那就是
我要开发java系统,它由三个应用程序组成。这些应用程序使用相同的包。如何在IntelliJ IDEA中组织这个项目?必须在项目中所有资源都组织在一个包层次结构中,还是在库中使用不同的项目。你能告诉我专业的解决方案吗?
我试图在没有Clojure项目的情况下从emacs执行“苹果酒杰克”,我只是想运行Clojure REPL。但我发现苹果酒正试图运行,而不是,它没有引用我的。当我尝试Clojure项目时,它通常与一起工作。 我想知道这有什么原因,即使当我在码头没有Clojure项目的情况下尝试时也没有问题,我希望苹果酒可以做到这一点,并且有一种方法可以在没有Clojure项目的情况下通过苹果酒运行Leininge
一个人打开网站上的页面来执行质量控制任务。在一个页面上,当用户点击开始按钮时,质量控制活动就开始了。在另一个页面上,活动在页面加载时开始。 一旦人员: 完成任务, 另存为不完整,或 只需关闭浏览器窗口 结束时间可以在质量控制任务开始后10秒到30分钟内的任何地方出现。 问题:如果您有一个包含ActivityID、StartTime和EndTime列的表,那么当更新现有记录的操作发生在插入记录的存储
问题内容: 我有一个用Go语言编写的运行时间较长的服务器。Main会触发执行程序逻辑的多个goroutine。在那之后主要没有什么用。一旦主程序退出,程序将退出。我现在使用的使程序运行的方法只是对fmt.Scanln()的简单调用。我想知道其他人如何阻止main退出。以下是一个基本示例。在这里可以使用哪些想法或最佳做法? 我考虑过创建一个通道并通过接收该通道来延迟main的退出,但是我认为如果我的
如何从matlab运行clojure脚本? 我尝试了以下方法:使用jdk 1.7运行matlab,然后调用java 在matlab中,设置类路径并使用clojure编译器 这里有个错误: 当我编写运行clojure的java类时,一切都可以从控制台运行,但不能从matlab运行。请给出建议。