我知道如何定义一个原子的外部操作(必须有参数),例如“sitDown”,然后在执行操作方法内的环境 Java 文件中手动对其进行编码。
但是,如果我定义一个外部操作,有没有办法让它接受参数? 假设我想定义一个可以在代理代码中以这种方式调用的操作:
销毁(4, 7);
在我的环境类中,如何在执行操作方法中检索这些值?
最佳答案
是的,您可以向环境发送参数并获取反馈。
例如,在应用程序中,更改机器人 LED 的方法可能如下所示(这属于扩展 Artifact - CArtAgO 的类):
@OPERATION
void changeLedPin(String newState) throws Exception {
try {
/** put gpio HIGH */
if (newState.equals("high")) {
logger.info("Changing pin to HIGH!");
ledPin.high();
}
/** put gpio LOW */
if (newState.equals("low")) {
logger.info("Changing pin to LOW!");
ledPin.low();
}
} catch (Exception e) {
e.printStackTrace();
}
}
Jason 调用此外部操作的代理代码可能如下所示:
!start.
+!start <-
changeLedPin(low).
对于反馈,您可以使用 OpFeedbackParam 在 Jason 代码中发送一个变量来统一。工件方法是这样的:
@OPERATION
void inc(OpFeedbackParam<String> value) {
/* some code */
}
来源:https://github.com/cleberjamaral/goldminers/blob/master/src/env/mining/Raspi.java https://github.com/cleberjamaral/camel-artifact/blob/master/camelJaCaMoRobot/src/env/artifacts/Counter.java
关于artificial-intelligence - JASON (AgentSpeak) 如何使用带有变量的外部操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48334608/