元程式設計(鼻祖是lisp)一直在語法上和書寫上特立獨行,其功能也和一般的函式不一樣,與從不同。
這個你需要去體會。比如反射。
有人喜歡「用程式生成程式」等描述。
比如,沒有事先定義乙個類或函式,但是可以根據客戶輸入的資訊,動態生成相應的類或函式。這個有點象c++的「模版」。
比如,你輸入引數input =[「name」,「book」,「price」,「publish date」,…],可以生成乙個新的類。但是,在此前,模版並不知道「輸入」什麼內容。
函式也是一樣的,我們一般情況下,函式是要先寫好,再呼叫的。元程式設計則具備這種能力,也許是你輸入什麼名字串,就生成什麼樣的函式簽名。
元程式設計的本質是**「書寫」**的能力。
元程式設計與巨集
巨集也是一種特殊的函式,julia的巨集會在函式簽名前面加乙個「@」,rust則不同,會在函式簽名後加乙個「!」。
巨集也有這樣「操作**」的神奇能力。
大家最熟悉@time
macro time(ex)
return quote
local t0 = time()
local val = $ex # 一段**
local t1 = time()
println("elapsed time: ", t1-t0, " seconds")
valend
end
進一步閱讀: julia學習筆記 元程式設計 巨集 macro
巨集像是乙個函式,這個函式接受一組引數返回乙個表示式。乙個簡單的巨集定義 julia macro sayhello name return println hello,name end sayhello macro with 1 method 這個巨集接收乙個引數並返回乙個表示式列印一句話,呼叫 j...
巨集元程式設計 技術 auto rec
auto rec巨集會快速探測滿足探測謂詞條件的 序號 最小的巨集。如果滿足條件會走實線深度往下探測,當遇到不滿足條件會走虛線。下面以探測16以內的 序號 define tl node 16 p tl if p 16 tl node 8,tl node 24 define tl node 8 p t...
巨集與125元
今年7月初,我作為課程設計的一名負責人,領導了乙個連我在內4人的開發團隊,開發了乙個簡易的 航班訂票系統 我定義了所需的資料結構,包括這樣乙個struct typedef struct passenger passenger,ppassenger 這之後每每要新建結點的時候,都得這麼寫 ppasse...