将元数据添加到Clojure结构中

5

我想在地图中的不同项中添加元数据,但如果我尝试使用以下代码,则会在Clojure中出现错误:

{:a 
    (with-meta 
        1
        {:some-meta-tag "some-meta-data-value"}
    )
} 

这是可能的吗?

1个回答

8

我可能错了,但我认为您无法给数字附加元数据:

user=> (with-meta 1 {:meta-tag "foo"})
java.lang.ClassCastException: java.lang.Integer cannot be cast to clojure.lang.IObj

来自文档

"符号和集合支持元数据,即有关符号或集合的数据映射。"

这似乎有效:

user=> {:a (with-meta 'foo {:meta-tag "foo"})}
{:a foo}

并且
user=> (meta (:a {:a (with-meta 'foo {:meta-tag "foo"})}))
{:meta-tag "foo"}

谢谢,这个集合很好用,正是我想要的! - yazzapps.com
1
正确。内置的Java类型(String,Number,...)不能具有元数据。 - Stuart Sierra

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接