将关键字参数传递给julia中的宏

时间:2017-12-26 12:59:32

标签: macros julia

我想将关键字参数传递给julia中的宏。我尝试手动解析kwargs并构建Expr但出现错误。我想念一下吗?

logger.add(logger.transports.Console, {
    colorize: true
});

输出:

macro sort(x, kv)
  @show x,kv
  d = []
  if kv.head == :(=)
    # push!(d, (kv.args[1], kv.args[2]))  # fail
    push!(d, (kv.args[1], esc(kv.args[2])))  # fail also
  end
  ex = quote
    sort($x; $(d...))
  end
  Meta.show_sexpr(ex)
  ex
end

x = collect(1:5)
rev=true
@sort x rev=rev

修改:我可以使用(x, kv) = (:x, :(rev = rev)) (:block, (:line, 9, Symbol("REPL[36]")), (:call, :sort, (:parameters, (:rev, :($(Expr(:escape, :rev))))), :x) )ERROR: TypeError: non-boolean (Expr) used in boolean context Stacktrace: [1] (::Base.#kw##sort!)(::Array{Any,1}, ::Base.#sort!, ::Array{Int64,1}) at ./<missing>:0 [2] #sort#8(::Array{Any,1}, ::Function, ::Array{Int64,1}) at ./sort.jl:546 [3] (::Base.#kw##sort)(::Array{Any,1}, ::Base.#sort, ::Array{Int64,1}) at ./<missing>:0 [4] macro expansion at ./REPL[36]:9 [inlined] [5] anonymous at ./<missing>:? :parameters构建关键字参数。我生成的Expr看似正常。但奇怪的是,我得到了错误“语法:无效语法(参数(kw(outerref rev)true))”

Expr

0 个答案:

没有答案