HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:; R3 ]% C$ W1 x, F
) r4 h4 C; {, B$ {# d p( V public Object buildActions () {
" S- k! M+ y$ ?/ Y5 @4 m super.buildActions();
/ p: y8 Z# q0 t1 A" {
. ^8 z, w) d) Q, m // Create the list of simulation actions. We put these in: [4 j0 T) ?9 {# w9 q/ [" g; b
// an action group, because we want these actions to be! ^/ x% H$ {2 e. C& X0 F
// executed in a specific order, but these steps should2 D$ X3 Y) m. R7 [6 B
// take no (simulated) time. The M(foo) means "The message
0 {6 l/ l, E, K4 P a2 m7 o // called <foo>". You can send a message To a particular% g, u5 T+ K- ^
// object, or ForEach object in a collection.% Q* n; k% R) @. b7 f
! | ^: ]" x/ q+ |! J) ?; P
// Note we update the heatspace in two phases: first run
# e/ B2 j- c4 f Y0 }8 `# v // diffusion, then run "updateWorld" to actually enact the) V) m! l. I3 ?* b! K
// changes the heatbugs have made. The ordering here is$ U, z/ X" b1 T7 `
// significant!
) q* ~0 b7 D5 M6 \2 z2 N " | U/ Z! j4 F* T( B9 w
// Note also, that with the additional
/ m' a# X/ H( ]' q+ I7 Y$ I: a // `randomizeHeatbugUpdateOrder' Boolean flag we can' L+ z$ r$ e. U9 q* R( Y: r
// randomize the order in which the bugs actually run3 J- @% P# J$ D" a% m
// their step rule. This has the effect of removing any
7 ^; K* t# S% ]& q9 D# m; Q& t // systematic bias in the iteration throught the heatbug
' e% M6 P% H# E# z. g/ v3 f // list from timestep to timestep
: K& ]/ @! X B' ?/ s% t! z( V) _. a
" j% r7 n y3 z // By default, all `createActionForEach' modelActions have! X; u; W& N; p$ {- T
// a default order of `Sequential', which means that the* Z' h3 M t; T8 ]( \3 u
// order of iteration through the `heatbugList' will be7 _5 J" B, M" h
// identical (assuming the list order is not changed2 b- f/ A" K7 F/ a4 ~5 O8 {! i
// indirectly by some other process).+ q% V6 Z4 @* J0 }4 ^: s
7 S; V+ s6 s3 O3 T0 j
modelActions = new ActionGroupImpl (getZone ());
# j# z( q$ b% p6 a d% }* k% `
3 b' M) P6 `* T0 q' M try {1 V& }5 R v2 A! O% V. |1 x/ ^# e/ I1 h
modelActions.createActionTo$message
2 z1 K9 L& h" z: A+ J6 U0 O (heat, new Selector (heat.getClass (), "stepRule", false));
. P) e; X% b/ i6 h& H& R: t8 P1 q } catch (Exception e) {, Z9 p* j& V0 i4 C9 h6 D7 h
System.err.println ("Exception stepRule: " + e.getMessage ());
2 ?; o: B0 c I2 @ y }
0 b; C$ F X. U- U
0 s& Q" H- w5 _4 O( b- S try {' X( t, \6 [- O
Heatbug proto = (Heatbug) heatbugList.get (0);
* L3 L/ ]- I `3 ~+ a Selector sel =
+ M. n7 B/ b3 }, A9 r9 _ new Selector (proto.getClass (), "heatbugStep", false);
4 G9 |% ^: }* X actionForEach =
6 U7 U4 m9 B. a modelActions.createFActionForEachHomogeneous$call
" s" b0 z5 ?- g1 H0 d+ k (heatbugList,* k: ~) g: O! r' ]) {
new FCallImpl (this, proto, sel,2 V# e2 p0 E9 [$ u: G: @8 S
new FArgumentsImpl (this, sel)));: ~9 ^ O5 y( h: D* `2 h) N
} catch (Exception e) {
3 j/ X/ Q) D! E# W$ b' `6 y e.printStackTrace (System.err);* P( X% o; t3 \# h6 ~" q6 l( [
}& [6 |) U" ?6 m/ r3 X4 S
/ l. m- H$ Z8 G, O8 I
syncUpdateOrder ();+ s# u% ^2 A" u, `- o. l4 l
~- Y1 G! Q5 I* I/ S( g6 R" U try {
: O1 r" w/ W8 a. q J1 Q7 d modelActions.createActionTo$message 4 o3 X9 O$ c! j& ?/ j4 W; O
(heat, new Selector (heat.getClass (), "updateLattice", false));
/ x7 Y$ p( P3 o } catch (Exception e) {# N# }) ^" r2 P# m+ y% k
System.err.println("Exception updateLattice: " + e.getMessage ());
- r! B! \$ Y g5 D' C1 J Y }
% g% ~& x- ]% v; E' |
- ^: ?9 s) p4 P M r // Then we create a schedule that executes the
0 c3 k% v+ f: q* J1 u // modelActions. modelActions is an ActionGroup, by itself it+ T, ?, m1 Y- y
// has no notion of time. In order to have it executed in$ e: a6 k D" o' d1 a
// time, we create a Schedule that says to use the
. I% k: G- o1 G3 x. `& E* P. V/ @ // modelActions ActionGroup at particular times. This
8 q8 U5 [2 H5 C9 Y/ ^ // schedule has a repeat interval of 1, it will loop every
/ ], K) r! s' y- X- K9 k5 y* k // time step. The action is executed at time 0 relative to: J' }& ?- S" U) P! L! P4 w: D/ q0 ]* L
// the beginning of the loop.- I3 k9 B3 W2 A
7 g. |6 y7 T- D+ E. f+ H // This is a simple schedule, with only one action that is
: `0 |* f) J6 h) f7 A H // just repeated every time. See jmousetrap for more
$ l) p( L' i6 l- R // complicated schedules.
" H( y5 f5 v0 j* E9 ^: ^
! Q: e( D. E/ W2 u8 e2 L0 Z7 }* v modelSchedule = new ScheduleImpl (getZone (), 1);: A. Q/ T' n6 J% O
modelSchedule.at$createAction (0, modelActions);5 j$ C4 N1 V2 f# X0 t. b
, f2 X E9 d5 m4 k5 Y* N return this;% n; g7 Y& S2 ~, N
} |