【问题标题】:How to alter an expression in generic function?如何更改泛型函数中的表达式?
【发布时间】:2014-02-06 22:53:24
【问题描述】:

例如

function sq(x)
    x ^ 2
end

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

function fun(x)
    sq(x)
end

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

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

【问题讨论】:

    标签: julia


    【解决方案1】:

    我怀疑你会发现使用宏来做这种工作会更容易:http://docs.julialang.org/en/latest/manual/metaprogramming/

    鉴于现有的函数定义,Julia 中的相关内容与其说是生成它的语法,不如说是生成的已编译机器代码。据我所知,修改语法不会(在 Julia 的内部没有一些深入的修改)对编译的机器代码有任何影响。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多