You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Julia中对基于表达式构造的匿名函数传值求值

问题根源

你现有写法的逻辑存在两层问题:

  • 匿名函数(x,y,z)->expr本身的功能就是直接返回外部变量expr(也就是你的表达式对象),没有任何求值逻辑
  • eval作用在已经定义好的函数对象上不会产生任何修改,返回的还是同一个返回表达式的函数,调用自然得不到计算结果

正确实现方案

方案1:构造时展开表达式(推荐,性能无损)

在构造函数的时候用表达式插值把计算逻辑拼入函数体,再执行eval,生成的函数性能和手写的普通函数完全一致:

expr = :(x + y)
# 用$把expr插值到函数定义的表达式中,再eval生成最终函数
f = eval(:( (x,y,z) -> $expr ))

调用验证:

julia> f(1,2,3)
3

如果需要批量构造多个函数,这个方案也可以直接套用,只需要循环替换expr的内容即可。

方案2:运行时动态求值(不推荐,性能低)

如果确实需要每次调用函数时都对最新的表达式求值,可以使用局部作用域绑定变量后求值,但是每次调用都会有表达式解析的开销,性能比方案1低几个数量级:

expr = :(x + y)
f = function (x,y,z)
    @eval let x=$x, y=$y
        $expr
    end
end

调用验证:

julia> f(1,2,3)
3

内容的提问来源于stack exchange,提问作者Sean C

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 06:06:01