Julia 如何更改泛型函数中的表达式?

Julia 如何更改泛型函数中的表达式?,julia,Julia,例如 我想用sq2call替换sqcall,以便重新定义fun通用函数。 我在下面的尝试更改了调用,但无法重新定义函数。任何帮助都将不胜感激 function sq(x) x ^ 2 end function sq2(x) (x+1) ^ 2 end function fun(x) sq(x) end 结束 我想您会发现使用宏执行此类工作更容易: 给定一个现有的函数定义,Julia中的相关内容与其说是生成它的语法,不如说是生成它的编译机器代码。据我所知,修改语法(如

例如

我想用
sq2
call替换
sq
call,以便重新定义
fun
通用函数。 我在下面的尝试更改了调用,但无法重新定义函数。任何帮助都将不胜感激

function sq(x)
    x ^ 2
end

function sq2(x)
    (x+1) ^ 2
end

function fun(x)
    sq(x)
end
结束


我想您会发现使用宏执行此类工作更容易:

给定一个现有的函数定义,Julia中的相关内容与其说是生成它的语法,不如说是生成它的编译机器代码。据我所知,修改语法(如果Julia的内部没有深入的黑客攻击)不会对编译的机器代码产生任何影响

change(:fun, (Int,))

function analyze_expr(exp::Expr)
   for i = 1:length(exp.args)
      arg = exp.args[i]
      if(typeof(arg) == Expr)
         analyze_expr(arg)
      elseif(arg==symbol("sq"))
         exp.args[i] = symbol("sq2")
      end
   end
function change(sym::Symbol, params)
    func = eval(sym)
    func_code = code_lowered(func, params)
    func_body = func_code[1].args[3]
    analyze_expr(func_body)
    println("Printing function body:",func_body)
end