问题标签 [clojure-java-interop]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
clojure - 如何在clojure中处理java可变长度参数?
我正在将一个 java lib 包装到 clojure 中,但是我在处理可变长度参数时遇到了问题。说,
我怎么能在clojure中调用这个函数?
clojure - Clojure 中控制流的时间——ScheduledThreadPoolExecutor 的陷阱?
我正在学习 Clojure 中的并发性。
我在http://dev.clojure.org/display/design/Scheduled+Events遇到了一个索赔(Stuart Serra?),声明:
- Clojure 函数不能在没有阻塞或 Java 互操作的情况下将时间用于控制流
- Java 互操作 (ScheduledThreadPoolExecutor) 不知道线程本地绑定
我不理解这些说法,请澄清一下,也许是一个例子。具体来说:
- ScheduledThreadPoolExecutor 有什么问题?由于我正在启动一个新的(绿色)线程,因此我不希望每个线程的绑定能够继续。
- 我可以安排一个普通的 Clojure 函数,那么是什么阻止我将所需的绑定作为词法封闭的上下文发送?
非常感谢!
java - Clojure deftype:如何约束字段类型?
我正在尝试编写一个可以在 Java 中使用的 Clojure 库,而用户不知道它是用 Clojure 编写的。为此,我需要我的字段具有正确的类型:
我喜欢我可以这样做:
它为 x/y 生成一个具有适当类型的类。但是,这似乎只适用于原语,不适用于类:
生成一个:
我期望的地方:
有没有办法限制字段类型?deftype
/之外还有其他选择defrecord
吗?
java - 使 Java 类在 Clojure 中作为序列工作
我正在使用一个表示一系列结果的 Java 类(有点像 Clojure 向量)。
我想将这个类与典型的 Clojure 序列函数一起使用(即我想让这个类表现得好像它支持序列抽象)但是我不能改变这个类,所以我不能让它实现clojure.lang.Seqable
或类似的。此外,令人讨厌的是,该类没有实现java.util.Collection
or java.lang.Iterable
。
我可以看到几个选项:
iterator-seq
在对象的(现有)迭代器上使用。- 将对象包装在另一个实现
java.util.Collection
/的类中clojure.lang.Sequable
- 通过查询对象创建一个构建 Clojure 向量或序列的函数
还有其他选择吗?最好的方法是什么?
clojure - 线程优先,线程最后和“点”形式
为什么这两个表达式给出相同的结果?
> (macroexpand-all '(->> "string" (.charAt)))
(. "string" charAt)
> (macroexpand-all '(-> "string" (.charAt)))
(. "string" charAt)
“->>”宏不应该将“字符串”作为列表中的最后一个元素插入吗?
java - 在 Java 和 Leiningen 之间夹入 Clojure
对于一个类,我需要编写一些 JVM 代码,我希望使用 Clojure。我让它与软件堆栈的底部一起工作,但我无法让它在位于顶部和底部的 GUI 层之间工作。我的主要问题是让 Java GUI 识别我的 Clojure 文件。我想为此使用 Leiningen,但 Java 编译解决方案似乎没有考虑这种互操作性。这里的答案似乎正是我所需要的。我不明白将代码放在哪里等(只是不够详细)。有没有人有任何提示?
我尝试制作一个插件,但它似乎不起作用。我知道我的案例肯定处于问题的边缘,但一个解决方案将使在课堂环境中使用 Clojure 变得更加容易。
谢谢!
更多细节:
使用已编译的 Clojure jar 时我运气不佳。我需要创建一个(呃)有状态的 Clojure 类(即方法不能是静态的)。我的课程(src/final_project/MyLinkLayer.clj)的代码看起来像
我的 project.clj 是
该类编译(“lein compile”)很好地进入“target/classes/final_project/”,但方法没有出现。我可以通过 jar 加载类(在我的项目导入包的顶部 Java 部分中使用 Maven 工作得很好)。我什至用 Eclipse 检查了 .class 文件,生成的唯一方法是来自 Object 的方法。有什么想法吗?另外,一旦我真正进入 Clojure 课程的“有状态”部分,有人有什么想法吗?提前致谢。
eclipse - 从 Java 调用 Clojure,他们说,这很容易,他们说
我是一个初出茅庐的 Clojure 程序员,在 Eclipse 中使用过直接的 Java。我正在尝试让我的 Java 程序调用从http://dev.clojure.org/display/doc/Getting+Started+with+Eclipse+and+逆时针文章创建的简单“hello”函数。hello 函数在通过逆时针插件启动的 Clojure REPL 中运行良好。当我尝试从 Java 类执行 hello 函数时出现问题。
谷歌搜索发现基本上有两种方法可以做到这一点:clojure.lang.RT 可以加载 Clojure 源并将其作为脚本执行,或者直接在 Clojure 源编译成 JAR 时执行。
clojure.lang.RT 变体工作没有问题,但我完全不知道如何让直接调用变体工作。在 Java 文件中,编译器无法解析“myproject.core”。
Clojure 源代码是 core.clj,如下所示,并且通过 REPL 像冠军一样工作:
然而,Java 源代码不会编译:
编译器错误是...
如何配置我的逆时针项目以将 core.clj 的 .class 表示放入 classes 目录,以便可以直接从 Java 引用它?
这必须在不使用 Maven 等的情况下成为可能。不?
clojure - 如何在 clojure/leiningen 中要求 java 类
我正在测试 Clojure/Java 互操作。我创建了一个新的 Leiningen 项目并创建了这个 project.clj 文件,其中包含一些我将使用的依赖项:
我还包括了“java-source-paths”列表,并将 hello.java 文件放入 src/java 目录,如下所示:
然后我从模板创建了这个 core.clj 文件:
正如你所看到的,我什至没有在应用程序函数中使用 hello java 类,我只是需要它,但是当我在终端中运行“lein jar”时,我得到了这个堆栈跟踪:
我应该做些什么不同的事情?
clojure - 您如何为 Leiningen 配置专有依赖项?
我们正在开发一个有一些 Clojure-Java 互操作的项目。至此,我们有一个具有各种依赖关系的类,我们将其放入 Eclipse 中的用户库中进行开发,但当然这在使用 Leiningen (2.x) 时无济于事。我们的大多数依赖项都是专有的,因此它们不在某个存储库中。
最简单/正确的方法是什么?
我见过leiningen - 如何为本地 jar 添加依赖项?,但它似乎已经过时了?
更新:所以我按照这些说明和github 上的 lein 部署文档为我的 jar 创建了一个本地 maven 存储库,并像这样编辑了我的 project.clj 文件:
其中 maven_repository 位于项目目录下(因此不使用file:///
)。当我运行“lein deps”时——我收到了这条消息:
“找不到支持的算法”是什么意思,我该如何解决?
Update2:在这里找到答案的最后一点。
java - 无法从 Clojure 调用实例方法。
我对Java和clojure完全陌生。但是凭借以前在 common lisp 方面的经验,我想我会尝试一下 clojure。我无法弄清楚一些非常基本的事情。
这是实际的 Java 代码。
当我运行此代码时,结果符合预期。
在 Clojure 我试过这个:
但是当这段代码运行时,会引发以下异常:
我在这里做错了什么?