我在下面简化了我的问题。我想在没有机器人的情况下停止永久性按钮“ go”的执行,我想从另一个过程(在这种情况下为“ test”)中调用它,就像这样:
to go
test
end
to test
if not any? robots [ stop ]
end
之所以这样,是因为我想在机器人死亡的地方叫停,以便我可以发送适当的用户消息。
答案 0 :(得分:3)
遗憾的是,您必须重新组织代码,以便您在执行过程中调用if not any? robots [ stop ]
,以使以下各项变为真实:
请参阅文档:
一个永久按钮也可以从代码中停止。如果永远按钮 直接调用一个过程,然后当该过程停止时,按钮 停止。 (在“乌龟”或“永久补丁”按钮中,该按钮不会停止 直到每只乌龟或斑块停止–一只乌龟或斑块不会 有权停止整个按钮。)
参考:http://ccl.northwestern.edu/netlogo/docs/programming.html#buttons
停止此代理程序立即从封闭过程中退出,询问, 或类似询问的结构(例如crt,孵化,发芽)。只有封闭 过程或构造停止,而不是代理的所有执行都停止。
参考:http://ccl.northwestern.edu/netlogo/docs/dict/stop.html
我不愿意发布的另一种hacky解决方案可能是执行以下操作,在该错误引发错误后停止。
to go
carefully[test][error-message stop]
end
to test
if not any? robots [ error "no more robots!" ]
end