当前位置:网站首页>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 .
边栏推荐
- Visual studio 2013 redistributable is installed, but MySQL installation fails
- Unexpected output super efficiency SBM model matlab code
- Wechat launched a web version transmission assistant. Is it really easy to use?
- How to set achievable medium - and long-term goals?
- 奶牛排序问题
- Use of static library and dynamic library
- 基於鄰接矩陣的廣度優先遍曆
- FPGA实现图像二值形态学滤波——腐蚀膨胀
- Data analysis - data source, field type, data collection trap
- SDRAM控制器——仲裁模块的实现
猜你喜欢

Jenkins localization and its invalid solution

基于邻接矩阵的广度优先遍历

Ardiuno smart mosquito racket

Implementation of depth first traversal based on adjacency matrix

Analytic hierarchy process

Pie chart metamorphosis record, the liver has 3000 words, collection is to learn!

基于邻接矩阵的深度优先遍历实现

ROS2+DDS+RTPS

How did the thief unlock the password after the iPhone was stolen? After reading the long knowledge

MySQL doit maîtriser 4 langues!
随机推荐
Qtvtkvs2015 test code
One minute to understand the difference between synchronous, asynchronous, blocking and non blocking
基於鄰接矩陣的廣度優先遍曆
SQL column value to row value (unpivot)
Implementation of depth first traversal based on adjacency matrix
win32
Interface test case design
静态库动态库的使用
Redis6.0新特性——ACL(权限控制列表)实现限制用户可执行命令和KEY
Graduation summary of cloud native training camp
Codecraft-17 and Codeforces Round #391 (Div. 1 + Div. 2, combined) D. Felicity‘s Big Secret Revealed
regular expression
Spiral matrix
VTK initialization code learning 1
vs2015+PCL1.8.1+qt5.12-----(1)
数字商品DGE--数字经济的财富黑马
标定。。。
【无标题】vsbiji esp....32
How do I fix the iPhone green screen problem? Try these solutions
vs2015+PCL1.8.1+qt5.12-----(1)