0

我只是找不到解决方案...这是问题所在:我有一个简单的主类,我在其中更改了 jvaBean 的属性。然后我想将 javaBean 的属性作为事实加载到我的 JESS 程序中。

我让它变得简单://java main

public static void main(String[] args) {
Bean testbean = new Bean();
testbean.setName("test");
Rete engine = new Rete();
engine.batch("simple");
engine.run();
}

//Bean类

public String name;
public String getName(){return name;}
public void setName(String name){this.name = name;}

//JESS simple.clp

(defclass bean Bean)
(bind ?b (new Bean))
(definstance bean ?b)
(facts)

当我启动 java main 时,javaBean 的事实没有被断言。输出 (facts) 显示 name 仍然是 nil (null)

有人可以帮助我吗,非常感谢!!

丹尼

4

1 回答 1

0

您在这里创建两个Bean对象;一个来自 Java 代码,一个来自 Jess 代码。您设置了name从 Java 创建的属性,但实际上添加到工作内存的是从 Jess 创建的属性。您可以在 Jess 或 Java 中或两者的组合中执行此操作,但如果您只需要一个对象,则只需创建一个。例如,您可以像这样从 Java 中完成所有操作:

public static void main(String[] args) {
    Bean testbean = new Bean();
    testbean.setName("test");
    Rete engine = new Rete();
    engine.defclass("bean", "Bean", null, false);
    engine.definstance("bean", testbean, false);
    engine.eval("(facts)");
 }
于 2013-11-25T23:23:00.357 回答