HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
# x. B- d- Z; o) Q& y
! S0 f; `/ [( y8 G$ y/ v" E; z public Object buildActions () {
! w; V/ ?2 n! Q: I super.buildActions();6 k. E) E( [7 h! V: ^: i
) k8 o7 d, B& r // Create the list of simulation actions. We put these in
" Q' h$ e. P! s9 j // an action group, because we want these actions to be
' S' Q' _" L1 ?+ v0 n0 _ // executed in a specific order, but these steps should% b4 E, j4 H/ w4 W
// take no (simulated) time. The M(foo) means "The message
3 u+ B" _( R/ a- A ? // called <foo>". You can send a message To a particular
7 O* O& J; a" w4 x; } // object, or ForEach object in a collection.' o u8 ]8 M. f. f3 M& |! H
- A; N% [$ d; X! O I% v( S // Note we update the heatspace in two phases: first run3 \8 K9 C6 J, m. W: a$ ]3 `: I
// diffusion, then run "updateWorld" to actually enact the, p% t& Y0 h ^) I2 d
// changes the heatbugs have made. The ordering here is. Q# Q2 I. M l* i+ `. Q! b6 F
// significant!
. E& c7 g) Z. K, _/ |% f4 S
: R; i" B; O3 D) ^6 i+ X" r // Note also, that with the additional: h: |: u* ]7 b+ j" U. n- \
// `randomizeHeatbugUpdateOrder' Boolean flag we can
7 L$ l9 P( t4 ]& Q. P, U# \ // randomize the order in which the bugs actually run
/ j! p2 t/ ]! C' C/ J) H/ z( @ // their step rule. This has the effect of removing any
; _! E& b- G1 G0 W // systematic bias in the iteration throught the heatbug9 H6 z8 P5 E1 s0 t& k" [* \; I3 E e
// list from timestep to timestep6 Q. w8 M! S2 b" Y$ _
( G+ p/ t) p' C+ P. u O0 [, k4 M // By default, all `createActionForEach' modelActions have5 F7 \3 F2 p, b& P
// a default order of `Sequential', which means that the+ L* N, p9 A& Z" S0 n
// order of iteration through the `heatbugList' will be
/ K/ K L; F5 C5 e# s. A // identical (assuming the list order is not changed
" S9 p9 z3 _ b // indirectly by some other process).
6 m8 X1 s9 l# e' ~# U9 d9 \
# `1 n( b! c4 g5 P modelActions = new ActionGroupImpl (getZone ());0 L, ], R" o1 J; w8 D* T
4 d% r ?- m& K! R: t0 t try {! Q$ V* h2 N; A5 K
modelActions.createActionTo$message
* \% D# ?, ?1 V0 M (heat, new Selector (heat.getClass (), "stepRule", false));
$ N0 _" }( P k% Z$ ] } catch (Exception e) {' x! a6 m2 }7 _1 n- o. h& n
System.err.println ("Exception stepRule: " + e.getMessage ());3 `+ Y: U9 D* K
}
) \% M# {+ x$ u% Z' H0 X! X" I
O5 `" g+ Z0 z/ v; D- } try {3 x3 Y4 j, X4 v
Heatbug proto = (Heatbug) heatbugList.get (0);* \2 {5 ]+ H/ r. Y8 s/ ^$ ]2 S1 E
Selector sel =
+ k& P9 O6 t+ D& z new Selector (proto.getClass (), "heatbugStep", false);
! y, S- r' [' c actionForEach =+ Z g1 y- p z# O8 Q
modelActions.createFActionForEachHomogeneous$call
: A% @5 w6 p: A3 f (heatbugList,
- F% E# y) N* r; F( f new FCallImpl (this, proto, sel,( X) R3 z- y7 R+ V$ z
new FArgumentsImpl (this, sel)));
% B& x8 \( b( d+ S } catch (Exception e) {9 D# w7 M# y2 u) y1 I
e.printStackTrace (System.err);
6 c9 W. B- L) u) w: V }! {# _$ y& k Z/ E/ F+ N0 X
$ P2 ]# w+ C9 A syncUpdateOrder ();
) x& n: y1 ?, U. }, E; I7 V, z0 Y# n f
try {1 m' D/ S+ M8 l% u& V# A
modelActions.createActionTo$message
( i* t* t9 s2 a: M (heat, new Selector (heat.getClass (), "updateLattice", false));
, e7 ^* `; a! ? } catch (Exception e) {
7 y6 x2 g2 F% I e System.err.println("Exception updateLattice: " + e.getMessage ());
# z$ z9 {) Z) B( |; _2 o( i }! n+ j) f# W8 w( U7 y
8 i6 V) G0 P5 b& ?: E$ e* a% M
// Then we create a schedule that executes the
" m2 {; ]3 R9 E* u0 V // modelActions. modelActions is an ActionGroup, by itself it7 k% S* L: d+ S) s9 J
// has no notion of time. In order to have it executed in! p: Z' K9 F5 [
// time, we create a Schedule that says to use the/ D3 {9 M# |* f6 M7 ^
// modelActions ActionGroup at particular times. This1 ~6 `- R& f9 {! q3 o
// schedule has a repeat interval of 1, it will loop every$ h* A! ], I/ w+ Q# o- e
// time step. The action is executed at time 0 relative to+ L( s0 a! n- k8 l5 L8 r6 y) B
// the beginning of the loop.
1 k; J8 P5 u3 X' N: Z; j3 t) M8 j" K1 R" ?5 I( x9 R5 u
// This is a simple schedule, with only one action that is, }3 d6 h8 Q6 A# d& z" J$ g
// just repeated every time. See jmousetrap for more
- ]/ c8 A8 d2 G! j2 A: v9 L // complicated schedules." Q; ^: q* ?, K0 I5 T* k5 J7 p
' E+ U. y8 \+ P# V' e% ~
modelSchedule = new ScheduleImpl (getZone (), 1);5 |& m# ^0 n, t7 @
modelSchedule.at$createAction (0, modelActions);$ d1 n$ A) ?( c- u
) h, ]* Z& n4 z8 Y! F0 A4 ~4 y return this;
3 I& N7 J1 B3 v/ G- x, x* H } |