当前位置: 首页 > 知识库问答 >
问题:

为什么我必须向org.clojure/clojure-contrib添加依赖项才能使用dissoc-in?

费明诚
2023-03-14

使用$lein new app my proj创建项目后,我无法导入clojure。contrib。核心,以便在中使用dissoc。

$ lein repl
REPL-y 0.3.0
Clojure 1.5.1
    Docs: (doc function-name-here)
          (find-doc "part-of-name-here")
  Source: (source function-name-here)
 Javadoc: (javadoc java-object-or-class-here)
    Exit: Control+D or (exit) or (quit)
 Results: Stored in vars *1, *2, *3, an exception in *e

my-proj.core=> (require '[clojure.contrib.core :as cc])

FileNotFoundException Could not locate clojure/contrib/core__init.class or clojure/contrib/core.clj on classpath:   clojure.lang.RT.load (RT.java:443)

load-libs显示clojure.contrib.corelib未加载:

my-proj.core=> (loaded-libs)
#{clojure.core.protocols clojure.instant clojure.java.browse clojure.java.io clojure.java.javadoc clojure.java.shell clojure.main clojure.pprint clojure.repl clojure.set clojure.stacktrace clojure.string clojure.template clojure.test clojure.tools.nrepl clojure.tools.nrepl.ack clojure.tools.nrepl.bencode clojure.tools.nrepl.middleware clojure.tools.nrepl.middleware.interruptible-eval clojure.tools.nrepl.middleware.load-file clojure.tools.nrepl.middleware.pr-values clojure.tools.nrepl.middleware.session clojure.tools.nrepl.misc clojure.tools.nrepl.server clojure.tools.nrepl.transport clojure.uuid clojure.walk complete.core my-proj.core}

但是,如果我在项目中向[org.clojure/clojure-contrib“1.2.0”]添加依赖项。clj,我可以要求clojure。contrib。核心和使用dissoc的广告。从我从这个答案中读到的,这应该是没有必要的。我做错了什么?

共有1个答案

漆雕修能
2023-03-14

核心语言中没有dissoc函数,尽管孵化器项目中有dissoc函数。使用1.2 clojure。现代Clojure中的contrib完全不受支持,如果它有效,那只是一个侥幸。最好不要包含它。使用孵化器中的孵化器或使用中的更新

现在人们倾向于使用

(update-in my-map [:key1 :key2] dissoc :key-to-remove) 

例如:

user> (update-in {:a {:b {:c 1 :d 2}}} [:a :b] dissoc :c) 
{:a {:b {:d 2}}}

如果您希望看到此功能添加,请投票支持此Jira问题

 类似资料: