小编use*_*027的帖子

如何在Clojure中将整个二进制文件(Nippy)读入字节数组?

我需要将存储在磁盘上的Nippy数据结构转换为Nippy可以读取的内容吗?Nippy使用字节数组,所以我需要一些方法将文件转换为字节数组.我试过了

(clojure.java.io/to-byte-array (clojure.java.io/file folder-path file-path))
Run Code Online (Sandbox Code Playgroud)

但这给了

java.lang.IllegalArgumentException: Value out of range for byte: ? 
Run Code Online (Sandbox Code Playgroud)

然后我尝试:

(into-array Byte/TYPE  (map byte (slurp (clojure.java.io/file folder-path file-path)))) 
Run Code Online (Sandbox Code Playgroud)

但不知何故,名称空间是错误的,我找不到合适的名称空间.

首先要编写Nippy结构,我正在使用:

(with-open [w (clojure.java.io/output-stream file-path)]
    (.write w (nippy/freeze data)))))
Run Code Online (Sandbox Code Playgroud)

binary serialization bytearray file clojure

5
推荐指数
3
解决办法
7326
查看次数

如何防止Clojure测试之间的符号污染?

我使用模拟样式测试来确保我的整个应用程序正常工作.核心Clojure测试库用于测试,通过Leiningen执行.当-main函数运行时,它定义符号以供以后在其逻辑中使用.问题是,如果我不小心使用在一个-main测试中创建但从未在当前-main测试中定义的符号,它仍然具有值.我希望得到一个错误,该符号是未定义的,但似乎我的测试环境以某种方式在deftest执行之间共享状态.我怎么处理这个?将我所有便利驱动的符号定义移到一个let语句中?

testing tdd unit-testing clojure leiningen

3
推荐指数
1
解决办法
51
查看次数

多线程Clojure Luminus服务器?

我不确定如何表达这一点,但任何关于如何实现以下行为的想法都会很棒.

我有一个Web服务器,可以长时间调用命令行程序.我希望服务器处理多个长时间运行的调用,但在调用完成之前不返回给定的请求.这不是一个网站,所以调用运行很长时间,客户端也不会超时.关于如何实现这一点的任何想法?

这个链接是否相关?在clojure中写一个多路复用服务器?

multithreading clojure luminus

3
推荐指数
1
解决办法
334
查看次数

Clojure基于参数的灵活功能设计?

我的函数行为不同,具体取决于哪些关键字参数提供了值.对于这个问题,我想知道根据提供的参数类型,行为略有不同的函数.

示例函数,用于递增列表的每个元素:

(defn inc-list [& {:keys [list-str list]}]
  (let [prepared-list (if-not (nil? list) list (clojure.string/split list-str #","))]
    (map inc prepared-list)))
Run Code Online (Sandbox Code Playgroud)

做一个多方法而不是测试参数的类型是否有意义?我之前没有使用过多种方法,也不确定正确的时间使用它们.如果这是一个好主意,下面的例子是否有意义?

例:

(defn inc-coll [col] (map inc col))
(defmulti inc-list class)
(defmethod inc-list ::collection [col] (inc-col col))
(defmethod inc-list String [list-str] 
  (inc-col 
    (map #(Integer/parseInt %)
         (clojure.string/split list-str #",")))
Run Code Online (Sandbox Code Playgroud)

clojure

1
推荐指数
1
解决办法
68
查看次数

如何将Clojure符号完全复制到新符号?

我有代码直接改变矩阵的性能.在我改变它之前,我希望得到一个完整的副本来存储一个新符号,然后由变异过程使用.无论如何,我可以将Clojure符号的内容复制到一个新的符号中,以便第一个可以在不影响第二个的情况下进行变异吗?

这是我失败的尝试之一:

(var mat1 (clatrix/matrix (clatrix/ones 2 2)))
(var mat1)
(intern 'analyzer.core 'mat1 (clatrix/matrix (clatrix/ones 2 2)))
mat1
(intern 'analyzer.core 'mat2 mat1)
mat2
(clatrix/set mat1 0 0 2)
mat1
mat2
Run Code Online (Sandbox Code Playgroud)

当然,这不起作用:

(def mat1 (clatrix/matrix (clatrix/ones 2 2)
(def mat2 mat1)
Run Code Online (Sandbox Code Playgroud)

我也尝试过(但不确定我是否正好在这里做):

(def mat1 (clatrix/matrix (clatrix/ones 2 2)
(def mat2 `mat1)
Run Code Online (Sandbox Code Playgroud)

(def mat1 (clatrix/matrix (clatrix/ones 2 2))
(def mat2 ~mat1)
Run Code Online (Sandbox Code Playgroud)

(def mat1 (clatrix/matrix (clatrix/ones 2 2))
(def mat2 (.dup mat1))
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

更新

我对迄今为止提出的答案进行了基准测试.我不确定线条的符号是什么意思.建立:

(def mat1 (clatrix/ones 1000 1000) ; …
Run Code Online (Sandbox Code Playgroud)

performance clojure mutable matrix immutability

0
推荐指数
1
解决办法
94
查看次数