HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
* v8 A! ]" [$ L2 I. I' |
4 I) q( A2 ]8 j0 \ public Object buildActions () {7 h3 s" J+ f c7 F4 h' R; z. _3 ]) a
super.buildActions();2 U4 m& ^4 l- z* G( T' O5 i8 Q
1 L5 O' d. H' I8 A# K // Create the list of simulation actions. We put these in
0 D5 f; v4 K# Z0 |$ N2 H D // an action group, because we want these actions to be- c1 o) T& \7 l- ?9 [
// executed in a specific order, but these steps should
4 q5 u' ~7 |8 M/ Z0 H! W // take no (simulated) time. The M(foo) means "The message
1 Z* J0 I/ u/ ], e" R& B // called <foo>". You can send a message To a particular3 d( T: A9 m- P# ^
// object, or ForEach object in a collection.
0 u/ B$ N3 |8 d : r: o) k- L4 X* j
// Note we update the heatspace in two phases: first run
" c* U2 e- U! ?) z% x1 ]- d // diffusion, then run "updateWorld" to actually enact the
" ~. t+ M! O- r' Y" V // changes the heatbugs have made. The ordering here is* G) D: n0 s( c$ s
// significant!7 Z; Y* I3 J2 ?, m
3 \0 }+ F* W8 ]) B
// Note also, that with the additional
% n9 Z! X% E* w // `randomizeHeatbugUpdateOrder' Boolean flag we can
! p* x$ Z4 G3 Y3 Q; h // randomize the order in which the bugs actually run
7 x8 k) E' E8 `1 B' T" p [) u // their step rule. This has the effect of removing any
+ b! I$ S' N; y( a3 H% V- x // systematic bias in the iteration throught the heatbug: y, M- Y; C' {& [
// list from timestep to timestep5 ?3 Y0 b6 k" V) s3 r$ P: ]6 d
% I- G, S* s$ o8 N7 C
// By default, all `createActionForEach' modelActions have
# N/ I' B2 L% E( Z" M6 c // a default order of `Sequential', which means that the
$ w+ R/ ~" ?1 ^1 O4 A; w2 a7 I // order of iteration through the `heatbugList' will be
( |* a; s) @# |6 k" Z* @1 G // identical (assuming the list order is not changed9 W5 U: @1 E! t; t5 v" Q
// indirectly by some other process).
) p- ~, s4 ^! i" I) J 8 t7 Q4 [9 J; g9 E/ Z$ l
modelActions = new ActionGroupImpl (getZone ());' H) f& g5 X. I$ x+ y
* X; ^. ^+ T o& F a7 I/ g
try {
. e0 h! B: w9 i1 m8 w5 Q, z modelActions.createActionTo$message- \( D! n, V7 K7 z( Y6 L) B
(heat, new Selector (heat.getClass (), "stepRule", false));' N' F+ z7 x8 w; d
} catch (Exception e) {
, f8 {4 x( d! V System.err.println ("Exception stepRule: " + e.getMessage ());
$ j& t$ g2 ^, U: u }
! Y: z z6 v/ {8 v! J, @: s8 J% e/ i1 c; ^
9 R. o# m+ Q* i8 N2 Z try {' j: t& d* h& ~& r( X
Heatbug proto = (Heatbug) heatbugList.get (0);5 S2 y/ p2 q. _" U
Selector sel = 9 ?1 j0 M5 N* S$ @' L0 H
new Selector (proto.getClass (), "heatbugStep", false);
6 q' o' R5 S. Z# Q: R actionForEach =( Y5 i9 Z( G& w% E" T, q
modelActions.createFActionForEachHomogeneous$call2 M6 S0 M* N" G: v) p
(heatbugList,
0 T$ x9 [6 M$ _' v; @6 h new FCallImpl (this, proto, sel,
+ o' m6 `( C' N1 Y+ G a new FArgumentsImpl (this, sel)));# _- v9 }6 D1 f# I5 B
} catch (Exception e) {
3 ~3 c4 P6 x% ^8 B9 K e.printStackTrace (System.err);- u; G9 c7 S* b1 Z) @1 w- D* g
}4 i& D8 M1 T' t% a; l2 J. \- g
5 ^3 b5 _. P' C2 \ syncUpdateOrder ();
8 q) O1 _: x# e- Z
. h5 U, X2 I3 P0 W0 I. h try {0 b0 q- }+ n# G+ ]5 U
modelActions.createActionTo$message 2 J' n: ^9 c6 w# L
(heat, new Selector (heat.getClass (), "updateLattice", false));
' n3 y& _* \7 t& A } catch (Exception e) {$ L1 A/ q% Z: G/ \
System.err.println("Exception updateLattice: " + e.getMessage ());
" r1 n9 L5 C4 V8 K: G } A6 e& q& A3 ^2 V3 s& l
) [8 k" u! i3 f* `6 l
// Then we create a schedule that executes the
+ L+ H# d( E( M* T6 P. @5 ^ // modelActions. modelActions is an ActionGroup, by itself it
/ ~* j: {! P5 W& K // has no notion of time. In order to have it executed in
/ @. W% I& R: P' k // time, we create a Schedule that says to use the' f. ?9 S5 Q3 j8 l/ o7 ~& `, T
// modelActions ActionGroup at particular times. This* l8 u9 `/ Y: m5 r# Q6 \
// schedule has a repeat interval of 1, it will loop every
6 q' L, M u! D. p2 l8 t9 G) t // time step. The action is executed at time 0 relative to
]0 Z' F: a+ v z1 v+ K% x // the beginning of the loop.
4 A4 P3 \; y! b! C, H5 m- q
" S; x+ @: T! a! [$ s9 D // This is a simple schedule, with only one action that is3 \/ n3 b7 h' ], r7 K! H C: K0 M
// just repeated every time. See jmousetrap for more
' D+ x/ z) x ]+ g, D# J& T // complicated schedules.
% h& Y7 m" z/ c5 g! U
7 _% I! i* x4 I1 V5 B/ K modelSchedule = new ScheduleImpl (getZone (), 1);: m8 o8 w3 @" D$ {4 x
modelSchedule.at$createAction (0, modelActions);
. K/ u1 q6 g3 Q: u" P % |8 { H+ J! n+ {6 T) F
return this;
3 x5 W* o T6 O& ?+ ?5 w } |