当前位置:网站首页>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 .
边栏推荐
猜你喜欢
随机推荐
PyQt theme
OA process editing
leetcode 300. Longest increasing subsequence (medium)
SQL column value to row value (unpivot)
连接投影仪
How to set achievable medium - and long-term goals?
Shell learning record (I)
Convert Weishi camera pictures
Ardiuno智能电蚊拍
数字商品DGE--数字经济的财富黑马
购买了fastadmin小程序助手但是问题工单中无法发布工单
MySQL必须掌握4种语言!
Calibration...
One minute to understand the difference between synchronous, asynchronous, blocking and non blocking
Keda 2.7.1 brief analysis of scaledjob code
Markov decision process (MDP): Blackjack problem (mc-es)
socket demo01
Depth first traversal based on adjacency table
Blazor University (33)表单 —— EditContext、FieldIdentifiers
ROS2+DDS+RTPS








