clojure - 原子在 Maclisp 中具有属性。如何在 Clojure 中做同样的事情?
问题描述
引用 (1975) Maclisp 参考手册:“每个原子符号都与它相关联的属性列表,可以使用plist函数检索。”
Maclisp 属性列表是“指标/值”对的列表。在 Maclisp 中,
(get x y)
获取 x 的 y 属性。
(putprop x 'banana y)
将 x 的 y 属性设置为香蕉。
我的任务是将许多旧的 Maclisp 代码转换为 Clojure。我是 Clojure 的新手,但随着这个项目的展开,我不会长久。在我跑去自己写东西之前,我想知道 Clojure 是否已经有了“属性列表”功能?还是附近的东西?
如果没有,组装好的 Clojure 大神会让我做什么来实现这样的功能?请记住,Maclisp 中的每个原子符号都可以但不必具有属性列表。谢谢你。
解决方案
clojure 具有与变量/数据值关联的元数据映射:
user> (def x [1 2 3])
#'user/x
user> (reset-meta! #'x {:my-data 1})
;;=> {:my-data 1}
请注意,此元数据与变量相关联,而不是与变量绑定数据相关联
user> (-> x var meta)
{:my-data 1}
user> (-> #'x meta) ;; short form
{:my-data 1}
user> (-> x meta)
nil
否则,您可以将其附加到值本身:
user> (def x ^{:some-data 101} [1 2 3])
#'user/x
user> (meta x)
{:some-data 101}
取决于你想如何使用它。
推荐阅读
- php - 循环遍历 PHP 中的数组
- express - 在 API 上使用 get 时出错(Vue.js、express.js)
- amazon-dynamodb - DynamoDB 忽略了索引的使用
- ios - 呈现 UIAlertController 时 iOS 应用程序崩溃
- javascript - 如何将 Decimal128 值转换为 JavaScript 中的数字?
- jpa - EJB 方法被多次调用
- python - 如何根据另一列的条件/分组删除一列中连续的重复行?
- scala - 从 play 2.1 迁移到 2.6 后上传文件不再起作用
- c++ - 平面和球体光线追踪的交集
- javascript - XMLHttpRequest 没有向 Django 服务器发送 POST 数据