Правило слюни не соответствует действительности, как использовать «и»?

Я пытаюсь работать следующим образом:

rule "userCount"
    when
        $user : User()
        $minutes : Integer()
            from accumulate(
                            MinutesPerUser( user == $user, $time : time) 
                            and Time(this == $time),
                            sum(1)
                           )
    then
        System.out.println( $minutes );
end

но кажется, что часть and Time(this == $user) никогда не бывает правдой. Если я удалю эту часть, я получу вывод на печать.

Что не так с приведенным выше кодом?


person Dean    schedule 10.11.2014    source источник


Ответы (1)


Не зная взаимосвязи классов Java, немного сложно констатировать определенные факты. Но от

 $user : User()
 //...
 and Time(this == $user),

совершенно очевидно, что Time должен быть надклассом User или наоборот: иначе это ограничение не может быть выполнено.

Я не знаю, что вы должны написать вместо этого, так как нет спецификации того, что должно быть сделано.

Кстати, sum(1) выглядит довольно подозрительно, потому что это было бы лучше выражено count(1), дающим тот же результат.

person laune    schedule 10.11.2014
comment
Argh, простите меня, laune, у меня была опечатка в моем коде. $time - это то, что у меня было в моем производственном коде, я просто оставил там опечатку отладки :( - person Dean; 10.11.2014
comment
Теперь нам понадобится набор фактов — т. е. код, вставляющий их в рабочую память — который должен привести к совпадению. Вы должны добавить этот код в свой Q. - person laune; 10.11.2014