本来以为宏只是展开一下,可以写出如下的代码:
macro |(fs...)
ex = :($(first(fs))(x))
for f in fs[2:end]
ex = :($ex*$f(x))
end
:(x->$ex)
end
basis=[x->x^n for n=0:5];
IJ=[(@| i j)(2) for i in basis,j in basis];
其中 @| 就是将函数相乘,即 @| i j 等于 x->i(x)*j(x)
结果并不是预期的结果,展开后发现:
julia> @macroexpand [(@| i j)(2) for i in basis,j in basis]
:([((#85#x->begin
#= REPL[286]:6 =#
(Main.i)(#85#x) * (Main.j)(#85#x)
end))(2) for i = basis, j = basis])
里面 i 和 j 是Main.i Main.j 并不是想要的局部的 i 和 j。