1

当我将 java 对象作为 java 类中的属性进行比较时,我遇到了问题

这是我的 clp 文件

(import Model.*)

(deftemplate PizzaBase    
    (declare (from-class PizzaBase)  
             (include-variables TRUE)))  

(deftemplate PizzaTopping   
    (declare (from-class PizzaTopping)  
             (include-variables TRUE)))  

(deftemplate Pizza   
    (declare (from-class Pizza)  
             (include-variables TRUE)))  

(defrule make-pizza
        ?pizzaBase1 <-(PizzaBase{size == 9})
        (Pizza(pizzaBase ?pizzaBase1))  
        =>  
         (add (new PizzaBase "New DeepPan" 10))  
         )  

根据我的规则,我想创建一个新的 PizzaBase。当 Pizza 中的 PizzaBase 对象等于 PizzaBase1(size = 9),但 JESS 并没有为我创建一个新事实。根据我的想法,我认为 JESS 无法比较从类中创建的 Java 对象。因此,JESS 没有添加任何事实。

所以,“如何解决这个问题?”,因为我在 JESS 网站上查看手册,但没有任何标题符合我的问题。

感谢!

4

1 回答 1

2

您可能忽略了第 5.3.2 节,将 Java 对象添加到工作内存。

Java 对象与事实不同,即使您使用 from-class 和 include-variables 从 POJO 派生影子 (!) 事实也是如此。事实包含(add ?aNewObject)对您通过调用保留的插槽名称插入的 Java 对象的引用OBJECT

像这样改变你的规则:

 (defrule make-pizza
    (PizzaBase{size == 9}(OBJECT ?pizzaBase1))
    (Pizza(pizzaBase ?pizzaBase1))  
    =>  
     (add (new PizzaBase "New DeepPan" 10))  
     )  
于 2014-10-02T06:57:36.850 回答