当我将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。
那么,&#34;如何解决这个问题?&#34;因为我查看了JESS网站上的手册,但根据我的问题没有任何标题。
感谢!
答案 0 :(得分:2)
您可能忽略了第5.3.2节,将Java对象添加到工作内存中。
即使您使用from-class和include-variables从POJO派生shadow(!)事实,Java对象也不会与事实相同。事实包含对您插入的Java对象的引用,方法是在保留的插槽名称(add ?aNewObject)
中调用OBJECT
。
像这样更改你的规则:
(defrule make-pizza
(PizzaBase{size == 9}(OBJECT ?pizzaBase1))
(Pizza(pizzaBase ?pizzaBase1))
=>
(add (new PizzaBase "New DeepPan" 10))
)