Jess 绑定 java 对象的这个实例
Jess bind this instance of java object
我想在 Jess 中做类似的事情:
(bind ?instance (this))
我让它工作的唯一方法是使用 "new Object" 而不是 "this"。
我怎样才能让它工作?
您可能正在将一些 Jess 代码传递给 Rete.exec() 方法,并希望引用进行调用的对象。你只需要自己将它注入 Jess。使用 Rete.store() 将对象存储在 Jess 中,然后使用 (fetch) 从 Jess 代码中的存储中检索它,或者使用全局上下文对象的方法——参见 Rete.getGlobalContext() -- 设置一个变量来引用 Java 对象,然后在 Jess 代码中使用该变量。
实际上,您可以通过三种方式从 Jess 环境访问 Pojo,如果它是单例,还有第四种。
public class Main {
public static Main theInstance;
public static Main getInstance(){ return theInstance; }
private String user = "Joe";
public String getUser(){ return user; }
public static void main( String[] args ) throws Exception {
Main main = new Main();
Main.theInstance = main;
Rete rete = new Rete();
// as a global
Defglobal glob = new Defglobal( "*main*", new Value( main ) );
glob.reset( rete );
// as a store member
rete.store( "main", main );
// as a fact
rete.add( main );
// execute demo clp
rete.batch( "two.clp" );
}
}
.clp 是:
(printout t "?*main* = " ?*main* crlf)
(printout t "?*main*.user = " (?*main* getUser) crlf)
(printout t "main = " (fetch main) crlf)
(printout t "main.user = " ((fetch main) getUser) crlf)
(defrule get-main-user
(Main (user ?user))
=>
(printout t "a Main(slot user) = " ?user crlf)
)
(run)
(printout t "Main.theInstance = " ((call Main getInstance) getUser) crlf)
输出:
?*main* = <Java-Object:Main>
?*main*.user = Joe
main = <Java-Object:Main>
main.user = Joe
a Main(slot user) = Joe
Main.theInstance = Joe
我想在 Jess 中做类似的事情:
(bind ?instance (this))
我让它工作的唯一方法是使用 "new Object" 而不是 "this"。
我怎样才能让它工作?
您可能正在将一些 Jess 代码传递给 Rete.exec() 方法,并希望引用进行调用的对象。你只需要自己将它注入 Jess。使用 Rete.store() 将对象存储在 Jess 中,然后使用 (fetch) 从 Jess 代码中的存储中检索它,或者使用全局上下文对象的方法——参见 Rete.getGlobalContext() -- 设置一个变量来引用 Java 对象,然后在 Jess 代码中使用该变量。
实际上,您可以通过三种方式从 Jess 环境访问 Pojo,如果它是单例,还有第四种。
public class Main {
public static Main theInstance;
public static Main getInstance(){ return theInstance; }
private String user = "Joe";
public String getUser(){ return user; }
public static void main( String[] args ) throws Exception {
Main main = new Main();
Main.theInstance = main;
Rete rete = new Rete();
// as a global
Defglobal glob = new Defglobal( "*main*", new Value( main ) );
glob.reset( rete );
// as a store member
rete.store( "main", main );
// as a fact
rete.add( main );
// execute demo clp
rete.batch( "two.clp" );
}
}
.clp 是:
(printout t "?*main* = " ?*main* crlf)
(printout t "?*main*.user = " (?*main* getUser) crlf)
(printout t "main = " (fetch main) crlf)
(printout t "main.user = " ((fetch main) getUser) crlf)
(defrule get-main-user
(Main (user ?user))
=>
(printout t "a Main(slot user) = " ?user crlf)
)
(run)
(printout t "Main.theInstance = " ((call Main getInstance) getUser) crlf)
输出:
?*main* = <Java-Object:Main>
?*main*.user = Joe
main = <Java-Object:Main>
main.user = Joe
a Main(slot user) = Joe
Main.theInstance = Joe