두 개의 에이전트 세트와 명령 블록을 사용하는 프리미티브를 작성하고 있습니다. 몇 가지 함수를 호출하고 현재 컨텍스트에서 명령 블록을 실행 한 다음 다른 함수를 호출해야합니다. 여기에 지금까지이 작업은 다음과 같습니다NetLogo 확장자의 프리미티브에서 명령 블록을 실행하십시오.
class WithContext(pushGraphContext: GraphContext => Unit, popGraphContext: api.World => GraphContext)
extends api.DefaultCommand {
override def getSyntax = commandSyntax(
Array(AgentsetType, AgentsetType, CommandBlockType))
def perform(args: Array[Argument], context: Context) {
val turtleSet = args(0).getAgentSet.requireTurtleSet
val linkSet = args(1).getAgentSet.requireLinkSet
val world = linkSet.world
val gc = new GraphContext(world, turtleSet, linkSet)
val extContext = context.asInstanceOf[ExtensionContext]
val nvmContext = extContext.nvmContext
pushGraphContext(gc)
// execute command block here
popGraphContext(world)
}
}
나는 nvmContext.runExclusively
를 사용하는 몇 가지 예를 보였다, 그러나 주어진 agentset 명령 블록을 실행할 필요를 위해 특별히처럼 그 보였다. 나는 현재 에이전트 (아마도 관찰자)가 그것을 실행하기를 원한다. 에이전트 세트에서 nvm.agent
을 랩핑하고이를 nvmContext.runExclusively
으로 전달해야합니까? 그렇다면 에이전트 세트에서 에이전트를 랩핑하는 가장 쉬운 방법은 무엇입니까? 그렇지 않다면 어떻게해야합니까?
'agent.AgentSetBuilder'가 더 이상 존재하지 않습니다. 즉, ArrayAgentSet (클래스 [? extends 에이전트], Array [에이전트], 월드)'ArrayAgentSet'의 생성자를 사용하는 것은 쉽습니다. –
아, 죄송합니다, 'AgentSetBuilder'는 마스터/헤드리스 물건입니다. 5.0.x 환경에서 네가 옳은 일을하고있다. –