DSL 中的逻辑或
Logic OR in a DSL
我对如何在 DSLR 中执行 or 有疑问,我有这个规则:
rule "Test"
when
There is AThing
- with attribute1 is equal to something1
- attribute2 is higher than or equal to somethingelse1
There is AThing
- with attribute1 is equal to something2
- attribute2 is higher than or equal to somethingelse2
then
something is valid
end
重写为 dlr,如:
rule "Test"
when
AThing(attribute1 == something1, attribute2 >= somethingelse1)
AThing(attribute1 == something2, attribute2 >= somethingelse2)
then
something is valid
end
在 DSLR 中将条件 2 放入 OR 中的最佳方法是什么?我想写这样的东西:
rule "Test"
when
(There is AThing
- with attribute1 is equal to something1
- attribute2 is higher than or equal to somethingelse1)
or
(There is AThing
- with attribute1 is equal to something2
- attribute2 is higher than or equal to somethingelse2)
then
something is valid
end
但是 Drools 编译器在抱怨,我尝试了很多括号组合。
在这种情况下,我可以编写 2 个单独的规则,但实际上它们是最复杂规则的一部分,我想避免仅仅为了一个或而重复两个大规则。
有办法吗?谢谢!
最好将其写成两条规则 - 无论如何都会发生。
语法要求你在LHS上写一个中缀或
when
( Type(...)
or
Type(...) )
then
和前缀或作为
when
(or Type(...)
Type(...))
then
使用 DSL 都不容易实现。您可以做的最好的事情是在以更大的符号 (>
) 为前缀的行上写上括号和 or ,这只会将余数传递给 DRL 输出。
when
> (
Type(...)
> or
Type(...)
> )
但是像你的例子这样的条件也可以这样组合:
when
AThing(attribute1 == something1 && attribute2 >= somethingelse1
||
attribute1 == something2 && attribute2 >= somethingelse2)
then
但这将很难使用 DSL 实现。 (正如我在 SO 的另一个角落所写的那样,...)
我对如何在 DSLR 中执行 or 有疑问,我有这个规则:
rule "Test"
when
There is AThing
- with attribute1 is equal to something1
- attribute2 is higher than or equal to somethingelse1
There is AThing
- with attribute1 is equal to something2
- attribute2 is higher than or equal to somethingelse2
then
something is valid
end
重写为 dlr,如:
rule "Test"
when
AThing(attribute1 == something1, attribute2 >= somethingelse1)
AThing(attribute1 == something2, attribute2 >= somethingelse2)
then
something is valid
end
在 DSLR 中将条件 2 放入 OR 中的最佳方法是什么?我想写这样的东西:
rule "Test"
when
(There is AThing
- with attribute1 is equal to something1
- attribute2 is higher than or equal to somethingelse1)
or
(There is AThing
- with attribute1 is equal to something2
- attribute2 is higher than or equal to somethingelse2)
then
something is valid
end
但是 Drools 编译器在抱怨,我尝试了很多括号组合。
在这种情况下,我可以编写 2 个单独的规则,但实际上它们是最复杂规则的一部分,我想避免仅仅为了一个或而重复两个大规则。
有办法吗?谢谢!
最好将其写成两条规则 - 无论如何都会发生。
语法要求你在LHS上写一个中缀或
when
( Type(...)
or
Type(...) )
then
和前缀或作为
when
(or Type(...)
Type(...))
then
使用 DSL 都不容易实现。您可以做的最好的事情是在以更大的符号 (>
) 为前缀的行上写上括号和 or ,这只会将余数传递给 DRL 输出。
when
> (
Type(...)
> or
Type(...)
> )
但是像你的例子这样的条件也可以这样组合:
when
AThing(attribute1 == something1 && attribute2 >= somethingelse1
||
attribute1 == something2 && attribute2 >= somethingelse2)
then
但这将很难使用 DSL 实现。 (正如我在 SO 的另一个角落所写的那样,...)