流口水条件不匹配
Drool Condition doesn't match
我目前正在写一个关于 Drools 的示例,我正在尝试检查基于小于等于运算符的特定条件。
我的 drools .drl 文件是:
//created on: May 7, 2015
package inlife.rules.controller
//list any import classes here.
import inlife.rules.model.StudentRuleBean;
//declare any global variables here
rule "Check if Student age is below limit"
when
//conditions
o: StudentRuleBean (studentName == "Peter" && age < 5 && age > 18)
then
//actions
o.setStudentEligible("false");
end
rule "Check for Range"
when
//conditions
o: StudentRuleBean (studentName == "Peter" && age > 5 && age <= 18)
then
//actions
o.setStudentEligible("true");
end
现在在上面的 .drl 文件中,我正在尝试检查学生姓名是否为 Peter,其年龄是否大于 5 岁且小于 18 岁,是否有资格上学,否则他不是..
但是我的条件没有得到满足。我想我的流口水文件有问题。
下面是我的Java豆Class
public class StudentRuleBean {
private String studentName;
private double age;
private String studentEligible;
public String getStudentName() {
return studentName;
}
public void setStudentName(String studentName) {
this.studentName = studentName;
}
public double getAge() {
return age;
}
public void setAge(double age) {
this.age = age;
}
public String getStudentEligible() {
return studentEligible;
}
public void setStudentEligible(String studentEligible) {
this.studentEligible = studentEligible;
}
}
严重卡住..需要这方面的帮助。
期待您的回答。提前致谢。
据我所知,谓词中的所有项目都是逻辑与。
然后您不需要为每个条件键入 &&。
用逗号分隔它们。
o: StudentRuleBean (studentName == "Peter" , age < 5 && age > 18)
文档说:
尽管 && 和 , 运算符具有相同的语义,但它们的解析优先级不同:&& 运算符在 || 之前操作员。 && 和 ||运算符在 , 运算符之前。请参阅下面的运算符优先级列表。
逗号运算符应该优先用于顶级约束,因为它使约束更易于阅读,并且引擎通常能够更好地优化它们。
复制粘贴自 https://docs.jboss.org/drools/release/5.2.0.Final/drools-expert-docs/html/ch05.html#d0e3962(5.8.3.3.4。逗号分隔 AND)
您使用的是哪个版本的 Drools?会不会是这个问题https://issues.jboss.org/browse/JBRULES-3584?
我目前正在写一个关于 Drools 的示例,我正在尝试检查基于小于等于运算符的特定条件。
我的 drools .drl 文件是:
//created on: May 7, 2015
package inlife.rules.controller
//list any import classes here.
import inlife.rules.model.StudentRuleBean;
//declare any global variables here
rule "Check if Student age is below limit"
when
//conditions
o: StudentRuleBean (studentName == "Peter" && age < 5 && age > 18)
then
//actions
o.setStudentEligible("false");
end
rule "Check for Range"
when
//conditions
o: StudentRuleBean (studentName == "Peter" && age > 5 && age <= 18)
then
//actions
o.setStudentEligible("true");
end
现在在上面的 .drl 文件中,我正在尝试检查学生姓名是否为 Peter,其年龄是否大于 5 岁且小于 18 岁,是否有资格上学,否则他不是..
但是我的条件没有得到满足。我想我的流口水文件有问题。
下面是我的Java豆Class
public class StudentRuleBean {
private String studentName;
private double age;
private String studentEligible;
public String getStudentName() {
return studentName;
}
public void setStudentName(String studentName) {
this.studentName = studentName;
}
public double getAge() {
return age;
}
public void setAge(double age) {
this.age = age;
}
public String getStudentEligible() {
return studentEligible;
}
public void setStudentEligible(String studentEligible) {
this.studentEligible = studentEligible;
}
}
严重卡住..需要这方面的帮助。
期待您的回答。提前致谢。
据我所知,谓词中的所有项目都是逻辑与。 然后您不需要为每个条件键入 &&。 用逗号分隔它们。
o: StudentRuleBean (studentName == "Peter" , age < 5 && age > 18)
文档说:
尽管 && 和 , 运算符具有相同的语义,但它们的解析优先级不同:&& 运算符在 || 之前操作员。 && 和 ||运算符在 , 运算符之前。请参阅下面的运算符优先级列表。
逗号运算符应该优先用于顶级约束,因为它使约束更易于阅读,并且引擎通常能够更好地优化它们。
复制粘贴自 https://docs.jboss.org/drools/release/5.2.0.Final/drools-expert-docs/html/ch05.html#d0e3962(5.8.3.3.4。逗号分隔 AND)
您使用的是哪个版本的 Drools?会不会是这个问题https://issues.jboss.org/browse/JBRULES-3584?