2024 State of 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就没有问题。
谢谢
clojure.string 不是 Java 特定的,它在 Clojure 和 ClojureScript 中都可用。

clojure.java.io 以及其他包含 "java" 的命名空间是 Clojure 特有的,你不能从 ClojureScript 中使用它们(因为 ClojureScript 编译为 JavaScript,而 Clojure 编译为类似 Java 的 JVM 字节码)。
但是在 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]])
...