HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
$ Y! ?, } B" I. N" B. B- A" [; X
2 ]5 e1 `' H+ i4 E/ S7 R public Object buildActions () {3 A( m* o/ ?, y; i& k; Q
super.buildActions();& w+ b8 t G, e5 Y' R) Z* t/ H, C4 k# K
6 y: Y- r4 K7 ^
// Create the list of simulation actions. We put these in
8 M% s2 `. U$ v8 J+ n // an action group, because we want these actions to be
% L. a3 Z) t6 } H) `1 ^6 J5 E // executed in a specific order, but these steps should
7 B7 O' ]# N( L: q }# X9 F // take no (simulated) time. The M(foo) means "The message
4 W- a8 T; Q& x- ^8 | // called <foo>". You can send a message To a particular+ o, u- c# ]7 h- ~( K1 M. D8 p
// object, or ForEach object in a collection.
- ?+ F. T7 V) c Y8 c' S% |6 v 1 R$ O$ M. N2 b, M+ v; E
// Note we update the heatspace in two phases: first run3 D! _9 m9 n+ }: _/ P7 M
// diffusion, then run "updateWorld" to actually enact the, p5 l/ j! z* D5 o! \1 u. w
// changes the heatbugs have made. The ordering here is% H' t) |% w6 ]& L
// significant!
( Y; h3 X9 ^8 n7 ~: l% R$ }) D 0 l* ~$ t$ N1 m6 ^! Z
// Note also, that with the additional
: ~7 C, a! d# {) K* @: ` // `randomizeHeatbugUpdateOrder' Boolean flag we can" g4 k! F: b- f h9 n8 h* T- _8 X
// randomize the order in which the bugs actually run
7 _/ o+ a+ Y! Y; j( S! f" [0 W2 B // their step rule. This has the effect of removing any
# R* C9 W! u2 v i; R; h // systematic bias in the iteration throught the heatbug
3 L& h1 e9 [/ K9 d. n- o( ]8 y, C // list from timestep to timestep6 E& [/ f! c" ~: G0 I
8 x+ X" A$ m/ ? // By default, all `createActionForEach' modelActions have; Q) h0 h& S, r# @) x1 ?$ u
// a default order of `Sequential', which means that the7 i+ K3 c/ L6 ]# U
// order of iteration through the `heatbugList' will be" g9 s1 @& i$ V* X
// identical (assuming the list order is not changed
2 W1 K6 G& E& r // indirectly by some other process)./ X- ?: z5 X# ~% I& J4 b; J9 e
7 m& t) S- t5 e" n' h | modelActions = new ActionGroupImpl (getZone ());
' B$ Y9 O# a$ y, K( I+ V1 h/ v$ B0 w/ C
try {
- j! I+ j, |% p+ {7 q0 Z4 D, Z# n1 g$ y modelActions.createActionTo$message, v3 T# {. K( b$ Y) R% G+ S" q! y
(heat, new Selector (heat.getClass (), "stepRule", false));; O% H% E' [. W2 a
} catch (Exception e) {/ w' ]5 `, f% g) m6 W
System.err.println ("Exception stepRule: " + e.getMessage ());
) h% h) s6 T' t; } }
* Z2 w( M5 d( E. v( d# D5 \
( w. c* C$ {6 p) b y' H try {
3 L0 ]7 F6 E* s5 r, c: C Heatbug proto = (Heatbug) heatbugList.get (0);
$ g* Q1 o% W) U6 ?& C Selector sel = $ h% R/ ^+ {0 O5 L- t
new Selector (proto.getClass (), "heatbugStep", false);
& n M6 @% G1 t' P actionForEach =
) ~% |7 E; }, Z1 Y4 B modelActions.createFActionForEachHomogeneous$call
( C$ I; I0 }" I2 b. F (heatbugList,
]7 [% @, R, g/ f4 U, h0 z) D& B new FCallImpl (this, proto, sel," H; L7 J1 Q$ ^8 U7 {5 V* ?
new FArgumentsImpl (this, sel)));
1 ]# c+ |6 T* q5 K } catch (Exception e) {7 U B! |( y: K) I k* P
e.printStackTrace (System.err);+ ]5 `/ U% F. l6 Z
}
( Z5 P" W* R' o( U( F9 B2 W0 I5 C ( c. R: `' W/ w# M
syncUpdateOrder ();. S. X5 N& M" m+ h! G5 e
+ X N2 D& H( c! O4 X4 Q
try {
6 N: x+ l9 m6 s6 y" t modelActions.createActionTo$message 0 W. z; B' u' R; D! H/ x
(heat, new Selector (heat.getClass (), "updateLattice", false));' q" ?5 M9 ~0 @4 A! h
} catch (Exception e) {+ b* f0 }7 [* o8 q8 H6 z% H
System.err.println("Exception updateLattice: " + e.getMessage ());
1 O( I/ r$ l) ^- y$ }: D- a }
7 E' `# e2 {) V0 L$ X % n X' Y0 D9 T6 p( @) i. I
// Then we create a schedule that executes the1 g0 b. W! d6 [! ^
// modelActions. modelActions is an ActionGroup, by itself it' K% Z( I0 r& ~0 K1 t. W
// has no notion of time. In order to have it executed in% y& R+ a2 s& m. N& J7 p$ ~! s
// time, we create a Schedule that says to use the' m7 P6 t8 s" e% G6 l9 K
// modelActions ActionGroup at particular times. This0 n) \6 g% u5 \2 w: r% o( F
// schedule has a repeat interval of 1, it will loop every
6 B3 T2 `! }, z; Q# C // time step. The action is executed at time 0 relative to
4 k! B6 ]- t/ _, t% u* f! |0 { // the beginning of the loop.: }# ^6 P4 ]% i+ l& y* H" f* U
' n, _+ ?# S4 `: d2 q- Y // This is a simple schedule, with only one action that is
9 b& P Y0 g5 b: w' M // just repeated every time. See jmousetrap for more
4 d6 Y# y" |) A& i // complicated schedules.
5 W2 H3 F" [; S4 k1 h , k+ a* H" m- Z4 }- W
modelSchedule = new ScheduleImpl (getZone (), 1);0 ^; j/ d' Z# i( v5 s, G
modelSchedule.at$createAction (0, modelActions);8 Q* V/ Q* x, N% W- m: ~
; Y1 [' V6 E7 M2 Y5 J9 m+ z
return this;
0 s+ l, y# j/ d6 n/ [) Z" A) R } |