编写一个DSL生成LUA语言的规则引擎示例代码
时间: 2024-04-12 08:31:51 浏览: 254
规则引擎代码
5星 · 资源好评率100%
下面是一个简单的DSL规则引擎示例代码,用于生成Lua代码:
```lua
-- 定义规则引擎
local RuleEngine = {
rules = {}
}
-- 定义规则
local function Rule(name, condition, action)
return {
name = name,
condition = condition,
action = action
}
end
-- 添加规则到规则引擎
function RuleEngine:addRule(rule)
table.insert(self.rules, rule)
end
-- 执行规则引擎
function RuleEngine:execute(data)
for _, rule in ipairs(self.rules) do
if rule.condition(data) then
rule.action(data)
end
end
end
-- 创建规则引擎实例
local engine = RuleEngine
-- 添加规则
engine:addRule(
Rule(
"Rule1",
function(data)
return data > 10
end,
function(data)
print("Data is greater than 10")
end
)
)
engine:addRule(
Rule(
"Rule2",
function(data)
return data < 5
end,
function(data)
print("Data is less than 5")
end
)
)
-- 执行规则引擎
engine:execute(8) -- 输出 "Data is greater than 10"
engine:execute(3) -- 输出 "Data is less than 5"
```
在上述示例中,我们定义了一个`RuleEngine`类作为规则引擎,它可以添加规则并执行这些规则。每个规则由一个名称、一个条件函数和一个动作函数组成。当数据满足规则的条件时,规则引擎会执行相应的动作。
在示例中,我们创建了一个规则引擎实例`engine`,然后添加了两个规则。第一个规则检查数据是否大于10,如果满足条件,则执行打印语句。第二个规则检查数据是否小于5,如果满足条件,则同样执行打印语句。
最后,我们通过调用`execute`方法来执行规则引擎,并传入不同的数据进行测试。
这只是一个简单的DSL规则引擎示例,你可以根据需求扩展和修改它。希望对你有帮助!
阅读全文