Вызов объекта, управляемого Джесс, из Java

)

Я пишу свою магистерскую диссертацию, и я должен использовать для этого платформу JESS. Я хочу задать вопрос.

Например, у меня есть этот класс Java, который называется «Основной»:

public class Main {

    private String user = "Joe";
    public String getUser(){ return user; }
    public String setUser(String user){ this.user = user;}
    public static void main( String[] args ) throws Exception {
        Main main = new Main();
        Rete rete = new Rete();
        rete.store( "main", main );
        rete.batch( "two.clp" );
    }
}

Теперь я хочу вызвать clp-файл и манипулировать объектом основного класса и сделать это:

(printout t "main.user = " ((fetch main) getUser) crlf) ;; I got for this Joe
((fetch main) setUser "Robin")
(printout t "main.user = " ((fetch main) getUser) crlf) ;; For this I got Robin

Но теперь я хочу спросить вас, как я могу вызвать этого манипулируемого пользователя по имени «Робин» из кода Java? Если я вызову Java следующим образом:

public static void main( String[] args ) throws Exception {
        Main main = new Main();
        Rete rete = new Rete();
        rete.store( "main", main );
        rete.batch( "two.clp" );
        System.out.println(main.getUser());
    }

В результате я получил "Джо", а не "Робин". Не могли бы вы рассказать мне, как я могу получить (или вызвать) управляемую версию объекта Java? И почему им не манипулируют в моем классе Java, когда я манипулирую именем пользователя от Джесс до Робин?

Буду благодарен за сообщение. Спасибо.


person Karim Mohammad    schedule 17.02.2016    source источник
comment
Было бы неплохо проверить, что код, который вы публикуете, (а) свободен от синтаксических ошибок и (б) действительно воспроизводит проблему, которую вы описываете.   -  person laune    schedule 17.02.2016
comment
Ну, вы устанавливаете значение пользователя в своем классе Main как Джо, поэтому, конечно, вы получите Джо, когда вызовете getUser. Как и во втором фрагменте кода, вам нужно вызвать setUser, main.setUser(Robin)   -  person C S    schedule 17.02.2016


Ответы (1)


Я добавляю класс и файл clp.file, который я использовал:

Java-класс:

  package Versuch;
import jess.*;

public class Auto {

    private String marke = "";
    private int ps = 0;

    public Auto(String marke, int ps){
        this.marke = marke;
        this.ps = ps;
    }

    public String getMarke() {
        return marke;
    }

    public void setMarke(String marke) {
        this.marke = marke;
    }


    public int getPs() {
        return ps;
    }



    public void setPs(int ps) {
        this.ps = ps;
    }

    public static void main(String[] args) {
        String getAktuell = "";

        Auto vw = new Auto("VW", 90);
        getAktuell = vw.getMarke();
        System.out.println(" before manipulating " + getAktuell );

        Rete engine = new Rete();
        engine.store("vw", vw);
            try {
                engine.batch("Versuch/rulebase.clp");

                System.out.println(" after manipulating " + getAktuell);



            } catch (JessException e) {
                System.out.println("JESS ERROR");
                e.printStackTrace();
            }       


    }

}

clp.файл:

(printout t "vw.getMarke = " ((fetch vw) getMarke) crlf)

((fetch vw) setMarke "Mercedes")


(printout t "vw.getMarke = " ((fetch vw) getMarke) crlf)

выход:

before manipulating VW
vw.getMarke = VW
vw.getMarke = Mercedes
 after manipulating VW

Первый вывод и последний вывод — это вызовы system.out.println из класса java. второй и третий вывод — вызовы распечатки из clp.file. Кто-нибудь понимает, почему последний звонок не является управляемым? Извините, я действительно новичок в этом вопросе. Буду очень благодарен за помощь.

person Karim Mohammad    schedule 17.02.2016
comment
о хорошо, я получил решение. я забыл спросить фактическую стоимость. если я добавлю перед system.out.println (после манипулирования + getAktuell), это --> getAktuell = vw.getMarke(); чем я получил измененную версию объекта vw. иногда легче подумать о какой-то проблеме после того, как спросишь кого-нибудь :-) спасибо - person Karim Mohammad; 17.02.2016
comment
Всегда нормально спрашивать, но (как вы теперь ясно видите) неправильно задавать вопрос, который на самом деле не описывает вашу проблему. - Вы можете удалить весь вопрос - это никому не нужно. - И никогда не отвечайте на свой вопрос дополнительной информацией - это должно войти в ваш вопрос, который вы можете отредактировать. - person laune; 18.02.2016
comment
Пожалуйста, не портите свой пост, это создает такой беспорядок. Вместо этого вам следует отредактировать эту информацию в своем вопросе и удалить сообщение со ссылкой «удалить» внизу. - person Glorfindel; 29.06.2017