2024 Clojure状态调查!中分享您的想法。

欢迎!请参见关于页面,了解更多关于如何使用本网站的信息。

0
语法和reader
编辑

大家好,

Java公共类A具有公共属性int a; 当(def a(A.))然后(.a a)时,显示错误A(错误名称:a)。

为什么会这样?

[编辑]

// 使用clojure访问类A的示例

public class A {

public int af() { return 2; }
public int af1(int x) { return x+2; }
public int a = 1;
static public int as;
static public int afs() { return 20; }
static public int afs1(int x) { return x+20; }

}

$ javac A.java
$ clojure -cp "."
user => (import A)
user => (def a (A.))
user => (def x (A.))
user => (def a1 (A.))
user => (.a a1)
1
user => (.a x)
1
user => (.a a)
执行错误(NoClassDefFoundError)在java.lang.ClassLoader/defineClass1 (ClassLoader.java:-2)。
A(错误名称:a)

;; why a is not allowed?

3答案

+1

如果您特别想访问该属性,请使用(.-a a)

0

能分享一个更详细的例子吗?我不确定你看到了什么。

0

我根据上面的代码尝试重现,但是未能成功。

% cat A.java
public class A {

public int af() { return 2; }
public int af1(int x) { return x+2; }
public int a = 1;
static public int as;
static public int afs() { return 20; }
static public int afs1(int x) { return x+20; }

}
% javac A.java
% clojure -Scp "."
Error: Could not find or load main class clojure.main
Caused by: java.lang.ClassNotFoundException: clojure.main
zsh: exit 1     clojure -Scp "."
% clojure -Sdeps '{:paths ["."]}'
Clojure 1.10.2
user=> (import A)
A
user=>  (def a (A.))
#'user/a
user=> (def x (A.))
#'user/x
user=> (def a1 (A.))
#'user/a1
user=>  (.a a1)
1
user=> (.a x)
1
user=>  (.a a)
1
user=>

看起来你的 clojure 脚本不是 tools.deps 的 clojure 脚本,因为那个没有 -cp 选项,这是什么脚本?除了启动 clojure 外,它还做了什么?你的 repl 在启动时也没有打印 clojure 的版本,你使用的是什么 repl,clojure 的什么版本?

嗨,hiredman

感谢你的反馈

我在 Win10 WSL 上
 
Linux 4.4.0-19041-Microsoft #1237-Microsoft Sat Sep 11 14:32:00 PST 2021 x86_64 x86_64 x86_64 GNU/Linux

openjdk 16.0.1 2021-04-20
OpenJDK 运行时环境(构建 16.0.1+9-Ubuntu-120.04)
OpenJDK 64 位服务器 VM(构建 16.0.1+9-Ubuntu-120.04,混合模式,共享)

Clojure 1.10.1
user=>

我使用 classpath "." 启动 clojure

$ clojure -cp "."
Clojure 1.10.1
user=> (import A)
A
user=> (.a (A.))
1
user=> (def a (A.))
#'user/a
user=> (.a a)
执行错误(NoClassDefFoundError)在java.lang.ClassLoader/defineClass1 (ClassLoader.java:-2)。
A(错误名称:a)

我认为在我的系统中,Java 工具链和 Clojure 之间可能存在一些兼容性问题。
不,问题可能出在你的 `clojure` 命令上。这不是从 https://www.clojure.org/guides/getting_started 安装的 `clojure` 命令,因此我不确定具体是什么以及还有其他什么代码正在运行。我能肯定的是,它不是上面指南中的 `clojure` 命令,因为上面指南中的 `clojure` 命令不接受 `-cp` 标志。

可能是因为作为你的 `clojure` 命令的一部分,有其他代码正在运行,试图为 repl 提供额外的工具,这导致了错误。然而,在不深入了解你的 `clojure` 命令实际执行内容的条件下,我们无法确定。
...