有人可以解释Scala,Groovy和Clojure之间的主要区别.我知道这些编译中的每一个都在JVM上运行,但我想在它们之间进行简单的比较.
我在远程站点上有一个clojure程序,让我们称之为mccarthy.我想要做的是连接到nrepl-ritz我的笔记本电脑,最好是使用nrepl-ritz-jack-in.插孔适用于本地程序,但似乎没有连接到远程程序.
C-x C-f 上 /mccarthy:code/program/project.clj
(require 'nrepl-ritz)
M-x nrepl-ritz-jack-in
Emacs似乎挂了.如果我去*nrepl-server*缓冲区,我会看到:
Exception in thread "main" java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at org.flatland.drip.Main.invoke(Main.java:117)
at org.flatland.drip.Main.start(Main.java:88)
at org.flatland.drip.Main.main(Main.java:64)
Caused by: java.lang.AssertionError: Assert failed: project
at leiningen.ritz_nrepl$start_jpda_server.invoke(ritz_nrepl.clj:23)
at leiningen.ritz_nrepl$ritz_nrepl.doInvoke(ritz_nrepl.clj:95)
Run Code Online (Sandbox Code Playgroud)
(还有很多其他线路......)
我drip在我的笔记本电脑上使用,但没有使用mccarthy,所以显然nrepl-ritz-jack-in没有检测到它是一个远程文件.nrepl-jack-in但是,在这种情况下,常规旧的将按预期工作.
我也试过一个开始nrepl-ritz使用lein上mccarthy:
mattox@mccarthy$ lein ritz-nrepl
nREPL server started on port 42874
Run Code Online (Sandbox Code Playgroud)
从我的笔记本电脑,我转发端口,因此本地42874 …
我想这对于每天使用Java工作的绝大多数程序员来说都是一个奇怪的问题.我不.我知道Java-the-language,因为我从事过Java项目,但不是Java-the-world.我从未在Java中从头开始创建Web应用程序.如果我必须使用Python,Ruby,我知道去哪里(Django或Rails),但如果我想在Clojure中创建一个Web应用程序,不是因为我被迫生活在Java世界中,而是因为我喜欢语言,我想尝试一下,我应该使用哪些库和框架?
今天教授的软件工程完全专注于面向对象的编程和面向世界的"自然"面向对象的视图.有一个详细的方法描述了如何将域模型转换为具有多个步骤的类模型以及许多(UML)工件,如用例图或类图.许多程序员已经内化了这种方法,并且很好地了解了如何从头开始设计面向对象的应用程序.
新的炒作是函数式编程,在许多书籍和教程中都有教授.但功能软件工程呢?在阅读有关Lisp和Clojure的文章时,我发现了两个有趣的陈述:
功能程序通常是自下而上而不是自上而下开发('On Lisp',Paul Graham)
函数程序员使用映射,其中OO程序员使用对象/类('Clojure for Java Programmers',Rich Hickley的演讲).
那么功能性应用程序的系统化(基于模型的?)设计的方法是什么,即在Lisp或Clojure中?有哪些常见步骤,我使用哪些工件,如何将它们从问题空间映射到解决方案空间?
lisp functional-programming clojure model-driven-development
"从java调用clojure"的大多数顶级谷歌点击都已过时,建议使用clojure.lang.RT编译源代码.如果您已经从Clojure项目中构建了一个jar并将其包含在类路径中,您能否帮助清楚地解释如何从Java调用Clojure?
重新加载Clojure文件中定义的函数的首选方法是什么,而不必重新启动REPL.现在,为了使用更新的文件,我必须:
src/foo/bar.clj(load-file "src/foo/bar.clj")(use 'foo.bar)此外,(use 'foo.bar :reload-all)不会产生所需的效果,即评估修改后的函数体并返回新值,而不是表现为源根本没有改变.
我想知道在clojure 1.3中读取和写入文件的"推荐"方式.
在Clojure中测试列表是否包含给定值的最佳方法是什么?
特别是,这种行为contains?目前令我感到困惑:
(contains? '(100 101 102) 101) => false
Run Code Online (Sandbox Code Playgroud)
我显然可以编写一个简单的函数来遍历列表并测试相等性,但肯定有一种标准的方法可以做到这一点吗?