请在 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.*不受影响。
谢谢
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]]))
...