当我将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.When --比萨相等的pizzaBase对象(size= 9),但是JESS并不是为我创建一个新的事实。根据我的想法,我认为JESS无法比较从class.Therefore创建的Java对象,JESS中没有添加任何事实。
所以,“如何解决这个问题?”,因为我看了JESS网站的手册,但没有任何标题,根据我的问题。
谢谢!
发布于 2014-10-02 06:57:36
您可能忽略了5.3.2节,即将Java对象添加到工作内存中。
Java对象与事实不一样,即使在派生阴影(!)时也是如此。POJO中的事实,使用from-class和include-变量。事实包含了通过在保留槽名(add ?aNewObject)中调用OBJECT插入的Java对象的引用。
像这样改变你的规则:
(defrule make-pizza
(PizzaBase{size == 9}(OBJECT ?pizzaBase1))
(Pizza(pizzaBase ?pizzaBase1))
=>
(add (new PizzaBase "New DeepPan" 10))
) https://stackoverflow.com/questions/26153781
复制相似问题