【问题标题】:Apply keyword to map vs map to keyword in Clojure [duplicate]在Clojure中将关键字应用于映射与映射到关键字[重复]
【发布时间】:2020-05-23 19:23:28
【问题描述】:

假设我有一张地图{:x 1}。

我注意到我可以通过将 :x 应用于地图来查找它:

(:x {:x 1})
;=> 1

或者通过将地图应用于关键字:

({:x 1} :x)
;=> 1

这两种形式有什么区别?

【问题讨论】:

    标签: clojure


    【解决方案1】:

    地图和关键字都实现了IFn,因此可以用作函数。他们实现的功能是get。所以它基本上总是翻译成(get map key default)。

    因此,您可以自行制定一些经验法则;需要考虑的一些事项:

    • 如果您在地图中有关键字,则使用关键字是您将在代码库中看到的最常见的内容
    • 如果您的键不是关键字或没有函数(例如字符串),您通常最好将映射应用为函数(例如({"a" 1} "a"))
    • 当你不确定你拥有的东西(键或地图)是否为 nil 时,你最好使用确定不为 null 的东西(否则你会得到一个例外)(例如 @987654325 @ 失败,但 ({:a 1} nil) 有效);如果您对两者都不确定:使用get

    【讨论】:

    • 不错的答案。很多好的提示和有用的信息。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-25
    • 1970-01-01
    • 2017-09-13
    • 1970-01-01
    • 2017-02-05
    • 2012-11-23
    • 2015-04-17
    相关资源
    最近更新 更多