Julia 在宏中引用时避免额外的开始块

Julia 在宏中引用时避免额外的开始块,julia,metaprogramming,ffi,Julia,Metaprogramming,Ffi,我正在写一个Julia宏,如下所示: macro cfunc(name, rettype) quotedname = Expr(:quote, name) return quote (()->ccall(($quotedname, "libc.so.6"), $rettype, ())) end end 我可以用它来创建一个函数: @cfunc(time, Int32)() # Returns current time 但是,如果我排除了引用宏: macro q

我正在写一个Julia宏,如下所示:

macro cfunc(name, rettype)
  quotedname = Expr(:quote, name)
  return quote 
    (()->ccall(($quotedname, "libc.so.6"), $rettype, ()))
  end
end
我可以用它来创建一个函数:

@cfunc(time, Int32)()  # Returns current time
但是,如果我排除了引用宏:

macro q(name)
  sym = Expr(:quote,name)
  return quote
    $(sym)
  end
end
macroexpand
生成额外的开始和结束:

:((begin
      #= REPL[142]:4 =#
      ()->begin
              #= REPL[142]:4 =#
              ccall((begin # <-- This is the extra begin
                          #= REPL[102]:4 =#
                          :clock
                      end, "libc.so.6"), Main.Int32, ())
          end       # ^^^ This is the extra end
  end)())

在这样引用时,如何避免开始/结束?

q
中的
quote
块在完全展开的版本中引入了额外的
begin
end
。它通常不会影响结果,但是

这项工作:

macro q(name)
  sym = Expr(:quote,name)
  return sym
end
此报价表不引入
开始
/
结束

macro q(name)
  sym = Expr(:quote,name)
  return :($sym)
end
macro q(name)
  sym = Expr(:quote,name)
  return :($sym)
end