当前位置:网站首页>表达式的动态解析和计算,Flee用起来真香
表达式的动态解析和计算,Flee用起来真香
2022-07-03 06:03:00 【xuhss_com】
优质资源分享
| 学习路线指引(点击解锁) | 知识定位 | 人群定位 |
|---|---|---|
| 🧡 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包即可。

2.1 超级简单案例
代码中有具体的注释,这里就不再详细说步骤了,截图如下:

这种简单表达式内容都已经确定,全是可以计算的,没有变量。
应用场景1:表达式固定,直接通过对应的值拼接计算的场景。
应用场景2:表达式不固定,但是公式维护时针对一些变量值用特殊字符标记,然后通过正则表达式的形式找到标记的变量,并替换为对应的业务字段值。
如:[a]+[b]+3.14,这种情况是可以通过正则表达式将中括号标记的变量找出来的,然后根据对应的中间变量的名字替换对应的值就可以计算了。
2.2 带变量的表达式
代码中有具体的注释,这里就不再详细说步骤了,截图如下:

这种带变量的形式就相对比较灵活,可以任意配置,只需在计算的时候将对应的变量附上值即可。有小伙伴可能会有疑问,变量不确定咋整啊,其实在实际应用场景中,很多时候需要传入的那些变量应该都知道,只是照着公式的规则动态传值即可。
应用场景:和简单案例中的不太一样,不需要特殊标记变量,这里直接正常维护公式正常传值即可。这种情况相对灵活,可以针对相关业务配置对应的公式,最后传对应的变量进行计算,最后根据算出的值进行相关业务处理即可。
2.3 表达式组合
CalculationEngine 可以将表达式进行组合计算,计算引擎会使用引擎内部其他表达式的结果、依赖关系,然后按顺序进行计算出组合之后的结果。

应用场景:这种情况一般用于有多个表达式的场景,就类似于Excel中多个单元格中的表达式一样,每个单元格中都有表达式,然后有一个单元格就会引用其他单元格中的表达式计算出来的值,最后得出结果。
2.4 扩展函数
有时候在项目中会将计算逻辑进行封装,只需要传入需要值即可,不需要每个调用者还得重新进行编写相关的计算逻辑,Flee也支持在表达式中组合使用自定义的函数,演示如下:
先在一个类中写好相关的方法**,这里的方法一定要是静态的、公共的**,如下:

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

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

在表达式中使用:

2.6 返回值是Boolean类型的表达式
在实际应用场景中,有些时候只需要得到一个是否的结果,可能不需要计算一个具体的值;

应用场景:这种情况一般用于一些自动判定规则的需求,比如有一些报表的结果在不同的业务类型时会有一个值的范围,如果超出范围就代表不合规,靠人为判断的话可能就没那么高效;类似这种对比数据的情况,如果只是简单的比对还容易实现,如果是复杂一点的关系比对,这种方式就相对灵活了。
好了,使用方式就暂时说到这,文中图片已经包含所有的代码。稍后我也会把代码提交github上和码云上。
总结
上文只是列举了一些简单的使用实例,具体小伙伴们可以根据业务场景进行使用。小伙伴们如果有更好的工具库,欢迎大家留言,一起学习。
关注“Code综艺圈”,和我一起学习吧。
边栏推荐
- Deep learning, thinking from one dimensional input to multi-dimensional feature input
- Kubesphere - build Nacos cluster
- CAD插件的安裝和自動加載dll、arx
- phpstudy设置项目可以由局域网的其他电脑可以访问
- Multithreading and high concurrency (7) -- from reentrantlock to AQS source code (20000 words, one understanding AQS)
- 88. Merge two ordered arrays
- Svn branch management
- [teacher Zhao Yuqiang] kubernetes' probe
- Fluentd is easy to use. Combined with the rainbow plug-in market, log collection is faster
- Exportation et importation de tables de bibliothèque avec binaires MySQL
猜你喜欢

Fluentd is easy to use. Combined with the rainbow plug-in market, log collection is faster

Detailed explanation of contextclassloader

Phpstudy setting items can be accessed by other computers on the LAN

Svn branch management

phpstudy设置项目可以由局域网的其他电脑可以访问
![[teacher Zhao Yuqiang] MySQL high availability architecture: MHA](/img/a7/2140744ebad9f1dc0a609254cc618e.jpg)
[teacher Zhao Yuqiang] MySQL high availability architecture: MHA

Oauth2.0 - user defined mode authorization - SMS verification code login

Jedis source code analysis (I): jedis introduction, jedis module source code analysis

Simple handwritten ORM framework

Kubernetes notes (IV) kubernetes network
随机推荐
70 shell script interview questions and answers
pytorch 多分类中的损失函数
[teacher Zhao Yuqiang] Flink's dataset operator
Sorry, this user does not exist!
Kubernetes notes (V) configuration management
CAD插件的安裝和自動加載dll、arx
项目总结--04
Jedis source code analysis (II): jediscluster module source code analysis
Leetcode problem solving summary, constantly updating!
SVN分支管理
Detailed explanation of contextclassloader
Zhiniu stock -- 03
轻松上手Fluentd,结合 Rainbond 插件市场,日志收集更快捷
最大似然估计,散度,交叉熵
[teacher Zhao Yuqiang] the most detailed introduction to PostgreSQL architecture in history
Solve the problem of automatic disconnection of SecureCRT timeout connection
理解 YOLOV1 第一篇 预测阶段
Project summary --04
Solve the problem that Anaconda environment cannot be accessed in PowerShell
PMP notes