Julia ---- 元編程 Macro 宏

主要是介紹一些教程中沒有的使用方式。

1、如何計算定義和調用宏生成Julia表達式

比如要返回:return 表達式

宏擴展是在求值之前完成的,因此當宏擴展在此代碼中發生時,塊中第一個表達式中宏的定義發生得太晚,無法影響塊中第二個表達式的擴展。有一種特殊情況可以滿足您的要求::toplevel 頂級表達式類型。這將自動用於模塊中的頂級全局表達式,但您可以手動構造此類表達式,如下所示:

ex = Expr(:toplevel,
    :(macro m() "return" end),
    :(@m())
)

# :($(Expr(:toplevel, :($(Expr(:macro, :(m()), quote
#     #= D:\Julia\StringToFunction:157 =#
#     "return"
# end))), :(#= D:\Julia\StringToFunction:158 =# @m))))

eval(ex)
#return

由於Julia沒有本地作用域的宏,因此該宏定義必須在全局作用域中進行,因此這應該在原始宏可以工作的任何位置都可以工作,即宏定義應該在頂級複合表達式有效的所有相同位置都有效。

參考:https://stackoverflow.com/questions/58114237/how-to-evaluate-julia-expression-defining-and-calling-a-macro/58117625#58117625

發佈了94 篇原創文章 · 獲贊 74 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章