是否可以在表达式中执行代码?
is it possible to execute a code inside an expression?
我有这个宏:
macro superM(name, field)
:(struct $(esc(name))
map(x -> (for i = 1:length(x) return $(esc(x[i][1])) end),field.args)
end)
end
@superM test ((arg1,2),(arg2,4))
我只想映射第二个参数以获取宏中 struct
的 arguments
。
所以,这个宏应该定义这样一个结构:
struct test
arg1
arg2
end
据我所知,我正在表达式中编写 map 函数,这意味着我的代码将不会执行,并且 map 函数将成为我的结构的一部分。但是有什么办法可以在表达式内部执行映射函数吗?
在这里我得到了错误:LoadError: UndefVarError: x not defined
你可以试试:
macro superM(name, field)
code = Base.remove_linenums!(quote
struct $name
end
end)
append!(code.args[1].args[3].args,[f.args[1] for f in field.args])
code
end
现在试一试:
julia> @macroexpand @superM(mysss,((field1,1),(field2,2)))
quote
struct mysss
field1
field2
end
end
julia> @superM(mysss,((field1,1),(field2,2)))
julia> mysss(1,5)
mysss(1, 5)
julia> dump(mysss(1,"ala"))
mysss
field1: Int64 1
field2: String "ala"
我有这个宏:
macro superM(name, field)
:(struct $(esc(name))
map(x -> (for i = 1:length(x) return $(esc(x[i][1])) end),field.args)
end)
end
@superM test ((arg1,2),(arg2,4))
我只想映射第二个参数以获取宏中 struct
的 arguments
。
所以,这个宏应该定义这样一个结构:
struct test
arg1
arg2
end
据我所知,我正在表达式中编写 map 函数,这意味着我的代码将不会执行,并且 map 函数将成为我的结构的一部分。但是有什么办法可以在表达式内部执行映射函数吗?
在这里我得到了错误:LoadError: UndefVarError: x not defined
你可以试试:
macro superM(name, field)
code = Base.remove_linenums!(quote
struct $name
end
end)
append!(code.args[1].args[3].args,[f.args[1] for f in field.args])
code
end
现在试一试:
julia> @macroexpand @superM(mysss,((field1,1),(field2,2)))
quote
struct mysss
field1
field2
end
end
julia> @superM(mysss,((field1,1),(field2,2)))
julia> mysss(1,5)
mysss(1, 5)
julia> dump(mysss(1,"ala"))
mysss
field1: Int64 1
field2: String "ala"