繁体   English   中英

将值从Java传递给Jess

[英]Passing Values from Java to Jess

我必须从Java类发送一些值,该Java类调用Jess脚本以在Jess脚本中进行处理。

到目前为止,这是我的代码:

int val1=0;
int val2=1;
Rete engine = new Rete();
Value val = engine.batch("abc.clp");
System.out.println("\n"+val);
engine.watchAll();

如何传递值val1val2 我找到了这个例子,但是并没有太大帮助。

最好将对话框中的一组值放入POJO中,该POJO插入工作内存中,并通过声明为从Java类派生的deftemplate进行访问。 在规则中使用它很简单。 POJO还可以保留一个字段,用于存储通过规则触发得出的结果。

该脚本应设置Jess定义,但不应调用run。 最好从Java做到这一点,并且最肯定的是在插入事实之后。

以下是显示上述所有内容的最小示例。

import jess.*;
public class Main {
    public static void main( String[] args ) throws Exception {
        Rete rete = new Rete();
        Value val = rete.batch("security.clp");
        Data data = new Data();
        data.setA( 42 );
        data.setB( 24 );
        rete.add( data );
        rete.run();
        System.out.println( "result = " + data.getRes() );
    }
}

POJO类:

public class Data {
    private int a;
    private int b;
    private String res;
    public void setA( int v ){ a = v; }
    public void setB( int v ){ b = v; }
    public void setRes( String v ){ res = v; }
    public int getA(){ return a; }
    public int getB(){ return b; }
    public String getRes(){ return res; }
}

clp文件(已修改以演示如何访问插槽值,并添加了无循环):

(clear)
(deftemplate Data (declare (from-class Data)))
(defrule matchab
   (declare (no-loop TRUE))
   ?data <- (Data {a > b} (b ?b))
=>
   (printout t (fact-slot-value ?data a) " and " ?b crlf)  
   (modify ?data (res agtb))
)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM