Ошибка: нет метода, соответствующего итерации(::Expr)

#macros #julia #mapping

Вопрос:

 macro superM(arg, argc)   map(foo,argc) end  @superM test {1,2}  

Я просто хочу передать аргумент argc функции map, но я получаю эту ошибку: no method matching iterate(::Expr)

Ответ №1:

это argc выражение, в скобках которого head {} :

 juliagt; dump(:({1, 2})) Expr  head: Symbol braces  args: Array{Any}((2,))  1: Int64 1  2: Int64 2  

итак, что вам действительно нужно, так это args поле выражения {1,2}

 juliagt; macro superM(arg, argc)   map(identity,argc.args)  end @superM (macro with 1 method)  juliagt; @superM test {1,2} 2-element Vector{Int64}:  1  2