是否可以在表达式中执行代码?

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))

我只想映射第二个参数以获取宏中 structarguments。 所以,这个宏应该定义这样一个结构:

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"