Functional programming Clojure元数据有哪些用途?
您如何在Clojure程序中使用元数据 我从编程Clojure中看到了一个示例:Functional programming Clojure元数据有哪些用途?,functional-programming,clojure,metadata,Functional Programming,Clojure,Metadata,您如何在Clojure程序中使用元数据 我从编程Clojure中看到了一个示例: 有什么用途?这种编程形式对我来说是全新的。编译器广泛使用元数据来存储对象的类型。 在给出类型提示时使用此选项 (defn foo [ #^String stringy] .... 我用它来存储添加到数字中的填充量。它用于与数据“正交”的信息,在确定值是否相同时不应考虑这些信息。 docstring作为元数据存储在:doc键下。这可能是元数据最明显的用途之一 可以选择使用元数据标记返回和参数类型,以避免在运行时对类
有什么用途?这种编程形式对我来说是全新的。编译器广泛使用元数据来存储对象的类型。
在给出类型提示时使用此选项
(defn foo [ #^String stringy] ....
我用它来存储添加到数字中的填充量。它用于与数据“正交”的信息,在确定值是否相同时不应考虑这些信息。- docstring作为元数据存储在:doc键下。这可能是元数据最明显的用途之一
- 可以选择使用元数据标记返回和参数类型,以避免在运行时对类型进行反射的开销,从而提高性能。这些也被称为“类型提示”。
是一种类型提示^String
- 在“引擎盖下”存储东西供编译器使用,例如函数的arglist、定义变量的行号,或者变量是否包含对宏的引用。它们通常由编译器自动添加,通常不需要用户直接操作
- 创建简单测试用例作为函数定义的一部分:
(defn#^{:test(fn[](assert true))}something[]nil)
(测试某物)
如果您正在阅读编程Clojure,那么第2章将很好地介绍元数据。图2.3很好地总结了常见的元数据。对于多样性,有一些答案并不集中于与语言本身的交互:
你也可以追踪一些数据的来源。未选中的输入被标记为
:污染的。验证器可能会进行检查,然后将状态设置为:clean
。执行安全相关操作的代码可能会在:受污染的上呕吐,并且只接受:干净的受污染的输入。元数据对于我打字非常有用。我说的不仅仅是类型提示,而是完整的自定义类型系统。最简单的示例-结构(或任何其他变量)的打印方法重载:
一般来说,与Clojure验证功能一起,它可以极大地提高代码的安全性和灵活性(尽管实际编码需要更多的时间)
有关键入的更多信息,请参阅
(defn foo [ #^String stringy] ....
(defstruct my-struct :foo :bar :baz)
(defn make-my-struct [foo bar baz]
(with-meta (struct-map my-struct :foo foo :bar baz :baz baz)
{:type ::my-struct}))
(defmethod print-method
[my-struct writer]
(print-method ...))