如何在Clojure中使用Zip?

unj*_*nj2 9 clojure

我对clojure非常新.zip实用程序看起来很有趣但我似乎无法使用它.

我试过了

;; ZIP
(:use "zip")
(def data '[[a * b] + [c * d]])
(def dz (zip/vector-zip data))
Run Code Online (Sandbox Code Playgroud)

但我得到了

java.lang.Exception: No such namespace: zip 
Run Code Online (Sandbox Code Playgroud)

你如何使用外部库?

Bri*_*per 16

您可能会混淆两种不同的方式来导入代码.你可以这样做:

user> (use 'clojure.zip)
Run Code Online (Sandbox Code Playgroud)

或者,当您在源文件中声明命名空间时:

(ns foo
  (:use clojure.zip))
Run Code Online (Sandbox Code Playgroud)

第二个版本是一个扩展到第一个版本的宏.

在外面(ns),做的(:use "zip"):use作为一个函数处理并将其"zip"作为参数调用(即尝试将字符串"zip"用作集合并查找其中的键:use),这什么都不做.

clojure.zip有一些函数的名字与其中的东西冲突clojure.core,所以你要么做这样的事情:

user> (use '(clojure [zip :rename {next next-zip replace replace-zip remove remove-zip}]))
Run Code Online (Sandbox Code Playgroud)

或者最好这样:

user> (require '(clojure [zip :as zip]))
Run Code Online (Sandbox Code Playgroud)

使用后者,您可以根据需要参考功能(zip/vector-zip data).

请参阅requirerefer的文档以及有关libs的页面.