请在 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.java.io的问题,没有clojure.string的问题。
谢谢
by
clojure.string不是Java专属的,因此它在Clojure和ClojureScript中都可以使用。

clojure.java.io以及其他包含"java"的命名空间是Clojure专用的,你无法从ClojureScript中使用它们(因为ClojureScript编译成JavaScript,而Clojure编译成与Java相同的JVM字节码)。
by
编辑了 by
但在Lein repl中我做了完全相同的函数,一切运行顺利,没有错误。
by
因为Lein repl是Clojure REPL,而不是ClojureScript REPL。
by
也许我会用这个cljs库并上传一个文件。

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