带有元数据的 Clojure 变量

发布于 2024-10-03 05:45:20 字数 227 浏览 1 评论 0原文

是否可以使用元数据创建一个新的变量,而无需经过“中间”变量?

换句话说,我知道我可以执行以下操作:

(def a-var 2)
(def another-var (with-meta a-var {:foo :bar}))

但是有没有办法在不先创建 a-var 的情况下创建 another-var 呢?

Is it possible to create a new var with metadata without going through an "intermediate" var?

In other words, I know I can do the following:

(def a-var 2)
(def another-var (with-meta a-var {:foo :bar}))

but is there any way to create another-var without creating a-var first?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

烟酉 2024-10-10 05:45:20

像这样:

user> (def ^{:foo :bar} another-var 2)
#'user/another-var
user> (clojure.pprint/pprint (meta #'another-var))
{:ns #<Namespace user>,
 :name another-var,
 :file "NO_SOURCE_FILE",
 :line 1,
 :foo :bar}
nil

Like this:

user> (def ^{:foo :bar} another-var 2)
#'user/another-var
user> (clojure.pprint/pprint (meta #'another-var))
{:ns #<Namespace user>,
 :name another-var,
 :file "NO_SOURCE_FILE",
 :line 1,
 :foo :bar}
nil
肤浅与狂妄 2024-10-10 05:45:20

另请注意,(def another-var (with-meta a-var {:foo :bar})) 不会将元数据附加到 Var,而是附加到。由于在您的示例中 a-var 保存一个整数,因此我不希望您的示例完全起作用,因为整数无法保存元数据。

user=> (def a-var 2)
#'user/a-var
user=> (def another-var (with-meta a-var {:foo :bar}))
java.lang.ClassCastException: java.lang.Integer cannot be cast to clojure.lang.IObj (NO_SOURCE_FILE:2)

Also note, that (def another-var (with-meta a-var {:foo :bar})) does not attach the metadata to the Var, but to the value. And since in your example a-var holds an Integer, I wouldn't expect your example to work at all, since Integers can't hold metadata.

user=> (def a-var 2)
#'user/a-var
user=> (def another-var (with-meta a-var {:foo :bar}))
java.lang.ClassCastException: java.lang.Integer cannot be cast to clojure.lang.IObj (NO_SOURCE_FILE:2)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文