Netlogo 为什么Agentset按钮的行为不同于询问Agentset的观察者按钮?

Netlogo 为什么Agentset按钮的行为不同于询问Agentset的观察者按钮?,netlogo,Netlogo,我看到运行某一段代码的agentset按钮(patch、turtle、link)和运行同一段代码的observer按钮(或turtles,或links)之间的行为差异。这是NetLogo中的错误吗?这是我的代码中的一个bug吗?行为差异的原因实际上不是bug,而是NetLogo的一个相当模糊的角落。原语是这种行为的核心。agentset按钮在幕后使用与ask concurrent相同的机制。将任何agentset按钮替换为使用ask concurrent在同一agentset上运行相同代码的观察

我看到运行某一段代码的agentset按钮(patch、turtle、link)和运行同一段代码的observer按钮(或
turtles
,或
links
)之间的行为差异。这是NetLogo中的错误吗?这是我的代码中的一个bug吗?

行为差异的原因实际上不是bug,而是NetLogo的一个相当模糊的角落。原语是这种行为的核心。agentset按钮在幕后使用与ask concurrent相同的机制。将任何agentset按钮替换为使用
ask concurrent
在同一agentset上运行相同代码的观察者按钮不应更改按钮的行为

通常,
ask
ask concurrent
之间的差异不大。海龟的移动方式可能略有不同,但其工作原理基本相同。但在某些情况下,差异可能非常显著。NetLogo模型库提供了一个名为“Ask Concurrent Example”的模型,该模型探索了
Ask
Ask Concurrent
之间的差异

《NetLogo编程指南》中的“海龟、补丁和链接永久按钮”部分也有关于此的文档;关于ask concurrent at的大部分章节也适用

注意:不建议使用
ask concurrent
。我在这里用它来澄清行为,但一般不应该使用它

注2:一般来说,最安全、最可预测的方法是根本不使用海龟、补丁和链接按钮。相反,只使用观察者按钮,并在按钮代码中使用
询问海龟
询问补丁
,或
询问链接