【问题标题】:Why am I having to add a dependency to org.clojure/clojure-contrib to use dissoc-in?为什么我必须向 org.clojure/clojure-contrib 添加依赖项才能使用 dissoc-in?
【发布时间】:2014-04-10 07:13:48
【问题描述】:

使用$ 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 库没有加载:

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 读到的内容来看,这应该没有必要。我做错了什么?

【问题讨论】:

    标签: clojure


    【解决方案1】:

    核心语言中没有 dissoc-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

    【讨论】:

    • 这是有道理的,感谢您提供的清晰示例。我想我误解了link 的文档,当时我认为这是受支持的语言功能。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-25
    • 2018-06-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多