当前位置:网站首页>Dynamic analysis and calculation of expression, flee is really sweet to use
Dynamic analysis and calculation of expression, flee is really sweet to use
2022-06-26 02:22:00 【Dotnet cross platform】
Preface
In many projects, there are often scenarios that require dynamic parsing of expressions and calculations , For example, some automatic approval rules , Or the values of some variables are dynamically calculated during operation through the maintained formula ; Due to scenario requirements , You need to configure the corresponding expression flexibly , Then I hope to calculate the corresponding value according to the maintained expression when necessary ; When I was chatting with my colleagues, I said Flee, I think it works very well , Hurry to share a wave with your friends .
Text
1. Flee brief introduction
Flee Is a . net Framework's expression parser and evaluator , You can evaluate string expressions at run time ( Such as :sqrt(a^2 + b^2), among a、b It's a variable. ). Its parsing and computing speed is relatively fast and efficient .
Flee Support Net6.0、Net5.0、Netstandard2.1、Netstandard2.0.
Not much else , Let's go directly to a few examples to experience a wave , For more details, you can go to github Look up :
github Address :https://github.com/mparlak/Flee
2. Case presentation
The case is demonstrated through the console , On the installation Flee Bag can .

2.1 Super simple case
There are specific comments in the code , I won't go into details here , The screenshot is as follows :

The content of this simple expression has been determined , All are computable , No variables .
Application scenarios 1: Expression fixed , A scene calculated directly by splicing the corresponding values .
Application scenarios 2: The expression is not fixed , However, some variable values are marked with special characters during formula maintenance , Then find the marked variable in the form of regular expression , And replace with the corresponding business field value .
Such as :[a]+[b]+3.14, In this case, the variables marked with brackets can be found through regular expressions , Then we can calculate by replacing the corresponding value with the name of the corresponding intermediate variable .
2.2 Expressions with variables
There are specific comments in the code , I won't go into details here , The screenshot is as follows :

This form with variables is relatively flexible , It can be configured at will , Just attach values to the corresponding variables during calculation . There may be some questions from my friends , How to adjust variable uncertainty , In fact, in the actual application scenario , You should know the variables that need to be passed in many times , Just dynamically transfer values according to the rules of the formula .
Application scenarios : It is different from the simple case , No special tag variables are required , Here, you can directly maintain the formula and transfer values normally . This situation is relatively flexible , Corresponding formulas can be configured for related businesses , The last pass is the corresponding variable for calculation , Finally, relevant business processing can be carried out according to the calculated value .
2.3 Expression combination
CalculationEngine You can combine expressions , The calculation engine will use the results of other expressions inside the engine 、 Dependency relationship , Then calculate the combined results in sequence .

Application scenarios : This is generally used in scenarios with multiple expressions , Is similar to the Excel The same expression in multiple cells in , Every cell has an expression , Then one cell will reference the value calculated by the expression in other cells , Finally, the result .
2.4 spread function
Sometimes computing logic is encapsulated in a project , Just pass in the required value , There is no need for each caller to rewrite the relevant calculation logic ,Flee It also supports the combination of custom functions in expressions , The demonstration is as follows :
First, write the relevant methods in a class , The method here must be static 、 Public , as follows :

Then you can use it in the expression , as follows :

2.5 Functions that support variable arguments
It is used in the same way as above , Customize a method , Only the parameters of this method are uncertain , Variable , as follows :

Use... In expressions :

2.6 The return value is Boolean Expression of type
In practical application scenarios , Sometimes you just need to get a yes no result , It may not be necessary to calculate a specific value ;

Application scenarios : This situation is generally used for the requirements of some automatic decision rules , For example, the results of some reports have a range of values for different business types , If it is out of range, it means non-compliance , If you rely on human judgment, it may not be so efficient ; Similar to this case of comparative data , If it is only a simple comparison, it is easy to realize , If it is a more complicated relationship comparison , This method is relatively flexible .
Okay , For the time being, let's talk about how to use it , The pictures in this article already contain all the codes . I will also submit the code later github And code cloud .
summary
The above is just a few simple examples , Specific partners can use it according to business scenarios . If you have a better tool library , Comments are welcome , Learning together .
Focus on “Code Variety industry ”, Study with me .
边栏推荐
猜你喜欢
饼图变形记,肝了3000字,收藏就是学会!
【缺陷检测】基于matlab GUI印刷电路板自动缺陷检测【含Matlab源码 1912期】
图的深度优先遍历
FPGA实现图像二值形态学滤波——腐蚀膨胀
Qtvtkvs2015 test code
V4l2+qt video optimization strategy
官方零基础入门 Jetpack Compose 的中文课程来啦!
Depth first traversal based on adjacency table
Tarte aux framboises + AWS IOT Greengrass
Pie chart metamorphosis record, the liver has 3000 words, collection is to learn!
随机推荐
Three factors affecting personal growth
Calibration...
Connecting the projector
Use of static library and dynamic library
leetcode 300. Longest Increasing Subsequence 最长递增子序列 (中等)
SDRAM controller -- implementation of arbitration module
Qtvtkvs2015 test code
静态库动态库的使用
How to use commands to write file names (including paths) in folders to txt files
Ardiuno智能电蚊拍
Tarte aux framboises + AWS IOT Greengrass
socket demo01
High performance and high availability computing architecture based on microblog comments
深度好文:什么是超网 Supernetting?
How to set achievable medium - and long-term goals?
cv==biaoding---open----cv001
WPF 窗口居中 & 变更触发机制
树莓派 + AWS IoT 入门实验
Back to top case
Eureka注册信息配置备忘