NetLogo: нельзя ли «навсегда» остановить кнопку другой процедуры? - PullRequest
0 голосов
/ 05 января 2019

Я упростил мою проблему ниже. Я хочу остановить выполнение кнопки «go» навсегда, когда нет роботов, и я хочу вызвать это из другой процедуры (в данном случае «test») следующим образом:

to go
 test
end

to test
  if not any? robots [ stop ]
end

Причина этого заключается в том, что я хочу вызвать остановку, когда робот умирает, чтобы я мог отправить соответствующее сообщение пользователя.

1 Ответ

0 голосов
/ 05 января 2019

К сожалению, вы должны реорганизовать свой код так, чтобы вы набирали if not any? robots [ stop ] на ходу, чтобы выполнялось следующее:

См. Документацию:

Кнопка навсегда также может быть остановлена ​​из кода. Если кнопка навсегда непосредственно вызывает процедуру, затем, когда эта процедура останавливается, кнопка останавливается. (В кнопке «черепаха или патч навсегда» кнопка не остановится пока каждая черепаха или патч не остановится - ни одна черепаха или патч не иметь возможность остановить всю кнопку.)

Ref: http://ccl.northwestern.edu/netlogo/docs/programming.html#buttons

stop Этот агент немедленно выходит из процедуры включения, спросите, или спросоподобная конструкция (например, КРТ, люк, росток). Только вмещающий остановка процедуры или конструкции, не все выполнение для агента.

Ссылка: http://ccl.northwestern.edu/netlogo/docs/dict/stop.html

Одно альтернативное хакерское решение, которое я не хочу публиковать, может заключаться в следующем, когда вы вызываете ошибку, в которой затем останавливается.

to go
   carefully[test][error-message stop]
end
to test
   if not any? robots [ error "no more robots!" ]
end
...