表达式的动态解析和计算,Flee用起来真香

虚幻大学 xuhss 162℃ 0评论

? 优质资源分享 ?

学习路线指引(点击解锁) 知识定位 人群定位
? Python实战微信订餐小程序 ? 进阶级 本课程是python flask+微信小程序的完美结合,从项目搭建到腾讯云部署上线,打造一个全栈订餐系统。
?Python量化交易实战? 入门级 手把手带你打造一个易扩展、更安全、效率更高的量化交易系统

前言

在很多项目中经常会出现需要动态解析表达式和计算的场景,比如一些自动审核规则,或者是一些变量的值通过维护的公式在运行过程中动态算出;由于场景需求,都需要比较灵活的配置对应的表达式,然后希望在需要的时候能根据维护的表达式计算出对应的值;刚好这块和同事聊天的时候说到Flee,感觉挺好用,赶紧来和小伙伴们来分享一波。

正文

1. Flee简介

Flee是一个用于. net框架的表达式解析器和求值器,可以在运行时计算字符串表达式的值(如:sqrt(a^2 + b^2),其中a、b是变量)。它的解析和计算速度是比较快和高效的。

Flee 支持Net6.0、Net5.0、Netstandard2.1、Netstandard2.0。

其他就不多唠了,咱们直接上几个实例感受一波,更多详情小伙伴们可以去github上查阅:

github地址:https://github.com/mparlak/Flee

2. 案例演示

案例就通过控制台演示了,安装上Flee包即可。

8a58cf0674d683396ed435608653bb56 - 表达式的动态解析和计算,Flee用起来真香

2.1 超级简单案例

代码中有具体的注释,这里就不再详细说步骤了,截图如下:

a08b0082af3d5a7632c065aad6c80a1b - 表达式的动态解析和计算,Flee用起来真香

这种简单表达式内容都已经确定,全是可以计算的,没有变量。

应用场景1:表达式固定,直接通过对应的值拼接计算的场景。

应用场景2:表达式不固定,但是公式维护时针对一些变量值用特殊字符标记,然后通过正则表达式的形式找到标记的变量,并替换为对应的业务字段值。

如:[a]+[b]+3.14,这种情况是可以通过正则表达式将中括号标记的变量找出来的,然后根据对应的中间变量的名字替换对应的值就可以计算了。

2.2 带变量的表达式

代码中有具体的注释,这里就不再详细说步骤了,截图如下:

1696a7d46ea78abcfc861cc616dcff29 - 表达式的动态解析和计算,Flee用起来真香

这种带变量的形式就相对比较灵活,可以任意配置,只需在计算的时候将对应的变量附上值即可。有小伙伴可能会有疑问,变量不确定咋整啊,其实在实际应用场景中,很多时候需要传入的那些变量应该都知道,只是照着公式的规则动态传值即可。

应用场景:和简单案例中的不太一样,不需要特殊标记变量,这里直接正常维护公式正常传值即可。这种情况相对灵活,可以针对相关业务配置对应的公式,最后传对应的变量进行计算,最后根据算出的值进行相关业务处理即可。

2.3 表达式组合

CalculationEngine 可以将表达式进行组合计算,计算引擎会使用引擎内部其他表达式的结果、依赖关系,然后按顺序进行计算出组合之后的结果

f5e484581897b333a6ef796e35b71937 - 表达式的动态解析和计算,Flee用起来真香

应用场景:这种情况一般用于有多个表达式的场景,就类似于Excel中多个单元格中的表达式一样,每个单元格中都有表达式,然后有一个单元格就会引用其他单元格中的表达式计算出来的值,最后得出结果。

2.4 扩展函数

有时候在项目中会将计算逻辑进行封装,只需要传入需要值即可,不需要每个调用者还得重新进行编写相关的计算逻辑,Flee也支持在表达式中组合使用自定义的函数,演示如下:

先在一个类中写好相关的方法,这里的方法一定要是静态的、公共的,如下:

63f9719ad7a0a4556fbd0e33c34e1e5c - 表达式的动态解析和计算,Flee用起来真香

然后就可以在表达式中用了,如下:

4ff491560068806497cf7da3a3c3c24c - 表达式的动态解析和计算,Flee用起来真香

2.5 支持可变参数的函数

和上面使用方式一样,自定义一个方法,只是这个方法的参数是不确定,可变的,如下:

add69c564ae0b8ca2ede6a29ba48bff2 - 表达式的动态解析和计算,Flee用起来真香

在表达式中使用:

8a9b6f4e0e4555edeab492728f5111f1 - 表达式的动态解析和计算,Flee用起来真香

2.6 返回值是Boolean类型的表达式

在实际应用场景中,有些时候只需要得到一个是否的结果,可能不需要计算一个具体的值;

94a7359a0f38f93fae85137cdca1d640 - 表达式的动态解析和计算,Flee用起来真香

应用场景:这种情况一般用于一些自动判定规则的需求,比如有一些报表的结果在不同的业务类型时会有一个值的范围,如果超出范围就代表不合规,靠人为判断的话可能就没那么高效;类似这种对比数据的情况,如果只是简单的比对还容易实现,如果是复杂一点的关系比对,这种方式就相对灵活了。

好了,使用方式就暂时说到这,文中图片已经包含所有的代码。稍后我也会把代码提交github上和码云上。

总结

上文只是列举了一些简单的使用实例,具体小伙伴们可以根据业务场景进行使用。小伙伴们如果有更好的工具库,欢迎大家留言,一起学习。

关注“Code综艺圈”,和我一起学习吧。

转载请注明:xuhss » 表达式的动态解析和计算,Flee用起来真香

喜欢 (0)

您必须 登录 才能发表评论!