HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
! {7 |7 y' D! q8 `% V3 p% r$ R9 ?1 e% ?# N& r( m% F
public Object buildActions () {8 H7 V* S# [6 {% Y
super.buildActions();+ E i- Y# c$ V, l2 r V) y8 Q
4 H2 q F( b3 a# H$ h
// Create the list of simulation actions. We put these in U% H2 E2 u! _* g
// an action group, because we want these actions to be
1 h) X4 E4 E5 V d. P& P( p // executed in a specific order, but these steps should
- ?; w4 Y0 U3 d% V& t // take no (simulated) time. The M(foo) means "The message) M6 ^2 b: z7 Y6 d- {" D6 r! ]
// called <foo>". You can send a message To a particular
: ?8 u3 D9 W5 R8 K // object, or ForEach object in a collection.2 C4 M, T1 H2 m2 X
: F$ q, ?5 F5 B; j2 ]" y) p0 ^! S // Note we update the heatspace in two phases: first run( j% C! q7 l! }8 n! }0 q! e
// diffusion, then run "updateWorld" to actually enact the% N, F8 `0 h, a2 D$ J
// changes the heatbugs have made. The ordering here is
' }" F: \5 w# I9 d2 w' i // significant!
* J" ^- T0 @- @) t7 ^5 N9 p
) `5 \# m! u, d // Note also, that with the additional
, {7 h2 j8 D2 z( T8 C/ v // `randomizeHeatbugUpdateOrder' Boolean flag we can
( d+ M1 ?# G4 _/ s // randomize the order in which the bugs actually run
- J I7 t: g% {5 E& }7 a // their step rule. This has the effect of removing any$ O* c2 p: P5 A, x
// systematic bias in the iteration throught the heatbug
9 g2 T0 E) ^6 U9 [* G( U6 T // list from timestep to timestep5 M2 g' P* H8 k, y
1 X# |3 x; `7 I5 t5 t
// By default, all `createActionForEach' modelActions have
/ _. R3 L* R$ O: c, i0 x // a default order of `Sequential', which means that the$ l+ V( ]. }8 Y; H) `4 }
// order of iteration through the `heatbugList' will be y7 _1 y1 B8 @; y
// identical (assuming the list order is not changed
* F8 Z% @9 W/ f0 V6 z m1 n" r // indirectly by some other process).
, }+ S3 ] C6 D* }+ {* m: R, A" t
o. `* Q: A8 M6 d modelActions = new ActionGroupImpl (getZone ());1 J$ Q, i! t* i9 \
( s D9 `# P d+ P try {
9 j- R% {3 T% y modelActions.createActionTo$message f; I; a! M! O( |- v& i: c0 |4 j
(heat, new Selector (heat.getClass (), "stepRule", false));9 b% E4 A$ J' B* v
} catch (Exception e) {3 D6 i: q( a+ [0 J6 ?) D: E1 P
System.err.println ("Exception stepRule: " + e.getMessage ());! P- F9 Y0 A, `7 ?
}2 W$ n3 |+ |! p) r' `
: i% K3 e1 v+ M* @2 q5 k7 a& W e try {
7 e* k- |! K/ F- { [ Heatbug proto = (Heatbug) heatbugList.get (0);
6 q8 V7 u9 [( I" u$ k% P7 H Selector sel = : T& K$ x% A4 k
new Selector (proto.getClass (), "heatbugStep", false);; f; _# M0 s2 j$ x+ y
actionForEach =
8 j/ Y8 B+ L* l. t9 V) q: F5 d/ e modelActions.createFActionForEachHomogeneous$call- \9 a5 x& c% u/ C" g3 Q
(heatbugList,' z6 O0 E [7 f6 Q5 a$ F: n
new FCallImpl (this, proto, sel,. I+ s" N5 G; p
new FArgumentsImpl (this, sel)));! m( Y& X, O9 L7 t$ c
} catch (Exception e) {
( w7 Z; W8 L& X3 W' t e.printStackTrace (System.err);$ Y: A; E3 r; P9 ^5 |
}* G! R1 \: N, s3 m, g0 n* O0 _
% e- R/ S6 ?0 q; H3 ?: b
syncUpdateOrder ();
1 {) I. X) ]6 o/ r, L* j0 r2 b# u1 U) l8 c8 c H4 _
try {! D$ Z+ Q) l7 e1 H6 B9 x0 O7 ~
modelActions.createActionTo$message
$ O* g* G0 b+ _$ U9 L: E3 G7 U, [ (heat, new Selector (heat.getClass (), "updateLattice", false));3 T1 g! K8 |9 C2 r
} catch (Exception e) {
3 J$ p' J4 r5 C% H' e' N System.err.println("Exception updateLattice: " + e.getMessage ());& V/ _3 F+ H5 _ O, E/ C
}
) B3 I1 R$ O, \8 e' S 5 [- V! D1 c- {4 X
// Then we create a schedule that executes the# i* |! f v' ~, s: c
// modelActions. modelActions is an ActionGroup, by itself it
" s' m7 Q$ m2 |0 B1 C // has no notion of time. In order to have it executed in
7 j w. Q* q5 i. q8 L- | // time, we create a Schedule that says to use the
: a: l: E- R4 |! U L // modelActions ActionGroup at particular times. This
! D: @9 |, m; h. l3 Q# ~' m( P // schedule has a repeat interval of 1, it will loop every
8 ]$ [1 c4 F/ h' c // time step. The action is executed at time 0 relative to) e/ \0 k: K3 Z. F( o
// the beginning of the loop.7 R( w) R1 x ~1 |9 C* F
4 u5 F( U+ N. O! B) A // This is a simple schedule, with only one action that is* D; ?. E# B) F. D' ` n
// just repeated every time. See jmousetrap for more5 R. R2 ^9 |0 L& N: ~
// complicated schedules.' }6 M; B. A4 ~# D% S5 O9 m
3 O5 \+ d/ g0 o+ a. Q
modelSchedule = new ScheduleImpl (getZone (), 1);
! ^+ G" C# o" U3 g modelSchedule.at$createAction (0, modelActions);5 h- `8 a4 ^* z5 S; Y" { g2 |) e
% t/ k# Q3 y0 D; i9 [8 V( j( w# Q( ^ return this;7 q( t4 M [6 k4 o; _
} |