Julia 是否可以改变功能';谁的身体有宏?

Julia 是否可以改变功能';谁的身体有宏?,julia,metaprogramming,Julia,Metaprogramming,是否可能(以及如何)使用宏获取函数体 例如,假设我有一个定义为 function foo (h::AbstractArray) 1. / (0.5 * h[i - 1, j, k] + h[i, j, k + 1]) end 我想编写一个宏@permute\u index,它将以某种方式改变函数体,使所有数组索引访问器都按如下方式排列: julia> @macroexpand :(@permute_indices(foo, Dict(1=>2, 2=>3, 3=>

是否可能(以及如何)使用宏获取函数体

例如,假设我有一个定义为

function foo (h::AbstractArray)
    1. / (0.5 * h[i - 1, j, k] + h[i, j, k + 1])
end
我想编写一个宏
@permute\u index
,它将以某种方式改变函数体,使所有数组索引访问器都按如下方式排列:

julia> @macroexpand :(@permute_indices(foo, Dict(1=>2, 2=>3, 3=>1)))
  1. / (0.5 * h[i, j - 1, k] + h[i + 1, j, k])

我不确定您是否可以这样做,因为
foo
可以有许多方法,因此
@permute\u index
不知道要使用哪个
foo
。但是我想你可以写一个宏
@permute_index
,放在
foo
定义之前,为这个函数定义几个方法,即取定义一个方法的表达式并给出几个方法定义(原始的和带有置换索引的-通常甚至不止一个).此外,您可能需要调查这是否适合您的需要?