Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Functional programming Clojure元数据有哪些用途?_Functional Programming_Clojure_Metadata - Fatal编程技术网

Functional programming Clojure元数据有哪些用途?

Functional programming Clojure元数据有哪些用途?,functional-programming,clojure,metadata,Functional Programming,Clojure,Metadata,您如何在Clojure程序中使用元数据 我从编程Clojure中看到了一个示例: 有什么用途?这种编程形式对我来说是全新的。编译器广泛使用元数据来存储对象的类型。 在给出类型提示时使用此选项 (defn foo [ #^String stringy] .... 我用它来存储添加到数字中的填充量。它用于与数据“正交”的信息,在确定值是否相同时不应考虑这些信息。 docstring作为元数据存储在:doc键下。这可能是元数据最明显的用途之一 可以选择使用元数据标记返回和参数类型,以避免在运行时对类

您如何在Clojure程序中使用元数据

我从编程Clojure中看到了一个示例:


有什么用途?这种编程形式对我来说是全新的。

编译器广泛使用元数据来存储对象的类型。
在给出类型提示时使用此选项

(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 ...))