请分享您的想法,参加 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 扩展名?

我做了这件事,但结果仍然相同,因为我需要在lld-view中调用它,这是一个 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。
by
也许我会用这个 cljs 库来尝试并上传一个文件

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