请在 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 编译为 JVM 字节码,就像 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]]))
...