前言
?动态类型语言,少了静态类型语言必须声明变量类型的累赘,但也缺失了编译时类型检查和编译时优化的好处。cljs虽然作为动态类型语言,但其提供Metadata让我们在必要的时候可选择地补充类型提示,以便提高代码可读性和供编译器优化使用。除了上述以外,Metadata还让我们在不影响对象本质的前提下,附加额外信息增强元编程能力。
Metadata附加的目标
?首先要明确一点的是,Metadata不是任何对象/值都拥有的。只有如下的对象才可附加Metadata
Symbol
Var
Collections(List,Map,Vector,Set)
Record
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中是
网友评论