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

欢迎!请查阅关于 页面以了解更多关于它如何工作的信息。

0
IO

你好
使用 lein dev
我尝试使用 java.io,我收到了这个消息

所需的命名空间 "clojure.java.io" 不可用,它由 "demo/core/test.cljs" 需要。
"clojure/java/io.clj" 被找到在类路径上。或许这个库仅支持 CLJ?

(ns demo.core.test
(:require [clojure.java.io :as jio])
)

(jio/copy
(:body (client/get "http://placehold.it/350x150" {:as :stream}))
(jio.File. "test-file.gif"))

谢谢

1 答案

0

.cljs 文件是 ClojureScript,因此它将被编译成 JavaScript 并在浏览器或 Node.js 上运行。

clojure.java.io 是 Clojure 的一部分,并提供了对 Java I/O 库函数的包装,因此只能从 Clojure(在 JVM 上)使用,而不能从 ClojureScript 使用。

也许您的 demo/core/test.cljs 文件应该是 Clojure 并且有 .clj 文件扩展名?

我这样做了,但结果仍然相同,因为我在 cljs 视图中调用它。
但我不明白为什么 clojure.string 没有问题,只有 clojure.java.io 不被接受。
谢谢
clojure.string 不是 Java 特定的,因此它对 Clojure 和 ClojureScript 都可用。

clojure.java.io 以及包含 "java" 的其他命名空间是 Clojure 独有的,不能在 ClojureScript 中使用(因为 ClojureScript 编译成 JavaScript,而 Clojure 编译成与 Java 相同的字节码)。

编辑了
但在 lein repl 中执行完全相同的函数时,一切运行顺畅,没有错误。
因为 lein repl 是 Clojure REPL 而不是 ClojureScript REPL。
也许我会尝试使用这个cljs库并上传一个文件

  (:require [reagent.core :refer [render atom]]
            [cljs.core.async :refer [put! chan   (:require-macros [cljs.core.async.macros :refer [go go-loop]]))
...