gpt4 book ai didi

java - 运行时的动态表达式求值器

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:46:31 25 4
gpt4 key购买 nike

我有一个应用程序,我想使用某种表达式计算器对其进行自定义。我想在不重新编译代码的情况下更改应用程序的某些部分。我正在考虑使用 groovy 表达式。

例如,我有一个可以通过提供表达式来启用/禁用的功能:

在这种情况下,该功能将被启用

Example 1:
EXPRESSION : status = part-time || status = hourly
INPUT: status = part-time

在这种情况下,该功能将被禁用

Example 2:
EXPRESSION : status = part-time || status = hourly
INPUT: status = permanent

用户需要输入一个表达式和一个输入。表达式应评估为 boolean 表达式

他们也可以改变表达式,程序会通过一些评估来获取它。顺便说一句,这些表达式已记录在案,并由我向我的应用程序的用户公开

Example 3:
EXPRESSION : salary > 10000
INPUT: salary = 7000

我之前看过一个程序这样做,他们说他们在后台使用了 groovy。但我无法理解这个概念。

有人可以给我一个想法吗?

最佳答案

使用evaluate 的替代方法。您的变量在绑定(bind)中定义,evaluate 包含表达式:

// setup binding
def emp = [status:'permanent', name:'Hugo']
def binding = new Binding()
binding.status = 'permanent'
binding.status2 = 'part-time'
binding.salary = 7000
binding.employee = emp
println binding.variables

// evaluate the script
def ret = new GroovyShell(binding).evaluate("status == 'part-time' || status == 'hourly'")
println ret

ret = new GroovyShell(binding).evaluate("status2 == 'part-time' || status2 == 'hourly'")
println ret

ret = new GroovyShell(binding).evaluate("salary > 10000")
println ret

ret = new GroovyShell(binding).evaluate("employee.status == 'permanent' || employee.status == 'hourly'")
println ret

返回

[status:permanent, status2:part-time, salary:7000, employee:[status:permanent, name:Hugo]]
false
true
false
true

关于java - 运行时的动态表达式求值器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50907695/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com