前言

?动态类型语言,少了静态类型语言必须声明变量类型的累赘,但也缺失了编译时类型检查和编译时优化的好处。cljs虽然作为动态类型语言,但其提供Metadata让我们在必要的时候可选择地补充类型提示,以便提高代码可读性和供编译器优化使用。除了上述以外,Metadata还让我们在不影响对象本质的前提下,附加额外信息增强元编程能力。

Metadata附加的目标

?首先要明确一点的是,Metadata不是任何对象/值都拥有的。只有如下的对象才可附加Metadata

  1. Symbol

  2. Var

  3. Collections(List,Map,Vector,Set)

  4. Record

  5. Type

meta读取Metadata

?通过meta我们可以获取对象的Metadata,若没有则返回nil
示例1:获取Var的Metadata

(def a 1)(meta #'a);;=> {:ns cljs.user, :name a, :file "<cljs repl>", :end-column 7, :source "a", :column 1, :line 1, :end-line 1, :arglists (), :doc nil, :test nil}

?上述示例1中是

网友评论