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

时间:2014-04-09 22:16:16

标签: clojure

使用$ lein new app my-proj创建项目后,我无法导入clojure.contrib.core以使用dissoc-in。

$ 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)

loaded-libs显示未加载clojure.contrib.core lib:

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}

但是,如果我在project.clj中向[org.clojure/clojure-contrib "1.2.0"]添加依赖项,我可以要求使用clojure.contrib.core并使用广告中的dissoc-in。根据我从this answer读到的内容,这不应该是必要的。我做错了什么?

1 个答案:

答案 0 :(得分:2)

核心语言中没有disoc-in功能,但incubator project中提供了该功能。在现代Clojure中使用1.2 clojure.contrib是完全不受支持的,如果它有效,那只是一个侥幸。最好不要包括它。使用孵化器中的那个或使用update-in

这些天人们倾向于使用

(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}}}

如果您希望添加此功能,请投票选择this Jira issue