我真的很流行,而且我正试图抓住一些不同的东西。现在我需要能够确定某些事件是否按特定顺序发生。问题是这个事件列表不断变化。现在我已经这样做了:
$a: Hit(id == A)
$b: Hit(id == B)
$c: Hit(id == C)
$d: Hit(id == D)
$e: Hit(id == E)
$f: Hit(id == F)
Hit($b after $a)
Hit($c after $b)
Hit($d after $c)
Hit($e after $d)
Hit($f after $e)
我想做更像这样的事情:
全球名单事件= [A,B,C,D,E,F]
对于此列表中的每个项目,会话中的每个事件都会以特定顺序发生。
F - >之后 - > E - >之后 - > D - >之后 - > C - >之后 - > B - >之后 - >甲
我/我可以使用累加器吗?
答案 0 :(得分:0)
累积不太合适,因为你不能轻易地将一个项目引用到之前或之后的那个项目。
可能有几种方法可以解决这个问题 - 这是我的建议。定义一个班级Parade
:
class Parade {
List<String> chain;
String next;
Hit last;
Parade( List<String> chain ){
this.chain = chain;
next = chain.get(0);
// assert chain.size() > 1
}
//...
}
现在你至少需要三条规则:
rule "find first Hit"
when
$p: Parade( last == null, $next: next, $chain: chain )
$h: Hit( id == $next )
then
$chain.remove(0);
modify( $p ){
setLast( $h ),
setNext( $chain.get(0) )
}
end
rule "find next Hit"
when
$p: Parade( $last: last, $next: next, $chain: chain )
$prev: Hit( this == $last )
$h: Hit( this after $prev, id == $next )
then
$chain.remove(0);
String next = $chain.size() > 0 ? $chain.get(0) : null;
modify( $p ){
setLast( $h ),
setNext( next )
}
end
你需要第三条规则来检测完整的Parade:last不是null,但接下来是。您也可以使用Parade中的列表来收集Hits。
(注意:所有未经验证的。)