前言
?動(dòng)態(tài)類型語(yǔ)言,少了靜態(tài)類型語(yǔ)言必須聲明變量類型的累贅,但也缺失了編譯時(shí)類型檢查和編譯時(shí)優(yōu)化的好處。cljs雖然作為動(dòng)態(tài)類型語(yǔ)言,但其提供Metadata讓我們?cè)诒匾臅r(shí)候可選擇地補(bǔ)充類型提示,以便提高代碼可讀性和供編譯器優(yōu)化使用。除了上述以外,Metadata還讓我們?cè)诓挥绊憣?duì)象本質(zhì)的前提下,附加額外信息增強(qiáng)元編程能力。
Metadata附加的目標(biāo)
?首先要明確一點(diǎn)的是,Metadata不是任何對(duì)象/值都擁有的。只有如下的對(duì)象才可附加Metadata
Symbol
Var
Collections(List,Map,Vector,Set)
Record
Type
meta
讀取Metadata
?通過(guò)meta
我們可以獲取對(duì)象的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中是
網(wǎng)友評(píng)論