Drools - 使用地图时出现解析器错误
Drools - Parser error while using a Map
我写了一个简单的规则,当年龄大于 18 岁时打印一个人的名字。
以下作品:
import java.util.Map;
rule "PrintNameWhenAgeWhenGreaterThan18"
dialect "mvel"
when
$data : Map()
then
if ($data.age > 18) {
System.out.println($data.name);
}
end
以下无效。为什么?
import java.util.Map;
rule "PrintNameWhenAgeWhenGreaterThan18"
dialect "mvel"
when
$data : Map()
$data.age > 18
then
System.out.println($data.name);
end
错误信息:
[10,13]: [ERR 102] Line 10:13 mismatched input '>' in rule "PrintNameWhenAgeWhenGreaterThan18"
[0,0]: Parser returned a null Package
Exception in thread "main" java.lang.IllegalArgumentException: Could not parse knowledge.
Java代码:
final Map<String, Object> data = new HashMap<>();
data.put("name", "Joe");
data.put("age", new Integer(30));
kSession.insert(data);
kSession.fireAllRules();
我知道我应该创建和使用一个人 class。这只是我试图弄清楚如何在 Drools 中使用带有 MVEL 方言的地图的示例。
流口水版本:6.3.0
MVEL 版本:2.2.6
谢谢!!
可能的解决方案:
看起来我需要在评估布尔表达式时使用 eval 语句?
import java.util.Map;
rule "PrintNameWhenAgeWhenGreaterThan18"
dialect "mvel"
when
$data : Map()
eval($data.age > 18)
then
System.out.println($data.name);
end
Shyam 建议
import java.util.Map;
rule "PrintNameWhenAgeWhenGreaterThan18"
dialect "mvel"
when
$data : Map(age > 18)
then
System.out.println($data.name);
end
你尝试了吗?
rule "PrintNameWhenAgeWhenGreaterThan18"
dialect "mvel"
when
$data : Map( age > 18 )
then
System.out.println($data.name);
end
我写了一个简单的规则,当年龄大于 18 岁时打印一个人的名字。
以下作品:
import java.util.Map;
rule "PrintNameWhenAgeWhenGreaterThan18"
dialect "mvel"
when
$data : Map()
then
if ($data.age > 18) {
System.out.println($data.name);
}
end
以下无效。为什么?
import java.util.Map;
rule "PrintNameWhenAgeWhenGreaterThan18"
dialect "mvel"
when
$data : Map()
$data.age > 18
then
System.out.println($data.name);
end
错误信息:
[10,13]: [ERR 102] Line 10:13 mismatched input '>' in rule "PrintNameWhenAgeWhenGreaterThan18"
[0,0]: Parser returned a null Package
Exception in thread "main" java.lang.IllegalArgumentException: Could not parse knowledge.
Java代码:
final Map<String, Object> data = new HashMap<>();
data.put("name", "Joe");
data.put("age", new Integer(30));
kSession.insert(data);
kSession.fireAllRules();
我知道我应该创建和使用一个人 class。这只是我试图弄清楚如何在 Drools 中使用带有 MVEL 方言的地图的示例。
流口水版本:6.3.0 MVEL 版本:2.2.6
谢谢!!
可能的解决方案: 看起来我需要在评估布尔表达式时使用 eval 语句?
import java.util.Map;
rule "PrintNameWhenAgeWhenGreaterThan18"
dialect "mvel"
when
$data : Map()
eval($data.age > 18)
then
System.out.println($data.name);
end
Shyam 建议
import java.util.Map;
rule "PrintNameWhenAgeWhenGreaterThan18"
dialect "mvel"
when
$data : Map(age > 18)
then
System.out.println($data.name);
end
你尝试了吗?
rule "PrintNameWhenAgeWhenGreaterThan18"
dialect "mvel"
when
$data : Map( age > 18 )
then
System.out.println($data.name);
end