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 视图中调用它,而我的视图是一个 cljs 文件。
但是不明白为什么只有 clojure.java.io 出现问题,而 clojure.string 没有这种问题。
谢谢
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]])
...