【问题标题】:How to use an expression in function from other function in julia如何在 julia 的其他函数中使用函数中的表达式
【发布时间】:2023-01-09 16:30:23
【问题描述】:

当我尝试下面的代码时:

function f(x)
    Meta.parse("x -> x " * x) |> eval
end

function g(x)
    findall(Base.invokelatest(f,x),[1,2,3]) |> println
end

g("<3")

Julia 抛出“适用的方法可能太新”错误。

如果我在下面尝试这些代码:

function f(x)
    Meta.parse("x -> x " * x) |> eval
end

findall(f("<3"),[1,2,3]) |> println

Julia 可以给我更正的结果:[1, 2]

我如何修改第一个代码以使用字符串在其他函数中生成函数,Thx!

在 Julia 1.6.7 中测试

【问题讨论】:

    标签: function julia expression metaprogramming


    【解决方案1】:

    function g(x)
        h = f(x)
        findall(x -> Base.invokelatest(h, x) ,[1,2,3]) |> println
    end
    
    g("<3")
    

    您的代码的不同之处在于,当您编写时:

    Base.invokelatest(f, x)
    

    你调用了f,但是f没有被重新定义。你想要做的是 invokelatest f 返回的函数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-10-30
      • 1970-01-01
      • 1970-01-01
      • 2014-03-08
      • 1970-01-01
      • 2021-05-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多