Julia 在宏中引用时避免额外的开始块
我正在写一个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
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