【发布时间】:2021-12-09 17:03:44
【问题描述】:
macro myMacro(name,arg)
:(struct $name
$(esc(arg.args[1]))
function $name(;$(esc(arg.args[1]))=arg.args[2].args[2])
new($(esc(arg.args[1])))
end
end)
end
我正在尝试创建一个具有默认值的结构,该默认值将作为宏的第二个参数。我知道当我将arg.args[2].args[2] 定义为默认参数时,它会报错,因为arg.args[2].args[2] 没有在struct 中定义,但我不知道如何定义它。
宏应扩展为:
macroexpand(Main,:(@myMacro myM ((arg,(default=10)))))
:(struct myM
arg
function myM(; arg = 10)
new(arg)
end)
【问题讨论】:
标签: macros julia metaprogramming default-constructor