HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
8 `. k3 n# i9 ]) g% n
5 S; Y: J, A: R8 ^ public Object buildActions () {
2 I6 Z$ D1 W. G. h9 F super.buildActions();
7 V$ u+ e% `' d d) ~& m
0 p9 y+ u# p! n1 R1 q. D // Create the list of simulation actions. We put these in3 P( a; H' E4 }2 }6 a0 T
// an action group, because we want these actions to be; \. B r7 E) r' S) n( b' n" I8 r6 { q
// executed in a specific order, but these steps should% \- L' P5 s$ L/ x
// take no (simulated) time. The M(foo) means "The message9 G7 o5 _ Y1 N+ _
// called <foo>". You can send a message To a particular
N: ^ |# m' K // object, or ForEach object in a collection.' O! w L# E& K+ Q% c+ `3 J) w
( g/ w, l5 h" G) T$ p& K // Note we update the heatspace in two phases: first run
$ ]6 s2 x. G! g! O$ l* ] // diffusion, then run "updateWorld" to actually enact the; J' z! ^+ ?% w6 q- L
// changes the heatbugs have made. The ordering here is
. k/ j$ t! D. a- s* {8 T/ R* s+ p // significant!, }" f6 U, ~" Z' o4 H, J: P
# s1 `, K5 p5 N! U
// Note also, that with the additional/ |/ D9 ~8 i/ L1 \' ?
// `randomizeHeatbugUpdateOrder' Boolean flag we can" g5 S a6 K0 c
// randomize the order in which the bugs actually run1 z: P( B# x7 }4 ^" y
// their step rule. This has the effect of removing any
5 y/ y* W" }; K* w // systematic bias in the iteration throught the heatbug) ?: [: ?% N7 }( ~1 _
// list from timestep to timestep6 i1 G# f5 Q B6 b9 {5 c- h
/ ]$ i, N9 M2 ^: g$ e& F6 o
// By default, all `createActionForEach' modelActions have
- q2 @# m* K( Y // a default order of `Sequential', which means that the
$ r3 N1 H) R) j' _, C8 h2 W% R9 D // order of iteration through the `heatbugList' will be
# s J9 f+ ^3 N; | // identical (assuming the list order is not changed
& h, t) U1 W m( F0 v% i$ I // indirectly by some other process).( w2 u7 l" F/ u/ N) e& A C
8 r- L: e- ]( z7 Y' j& X8 B modelActions = new ActionGroupImpl (getZone ());- J1 i0 e$ l k- r7 q! k
/ r3 T- s% ` G7 n" W. |7 ^& w: \ try {, T. g$ k w- E5 x! X
modelActions.createActionTo$message
! H! k, K: _: u! R (heat, new Selector (heat.getClass (), "stepRule", false));$ b' v! |% s, U* f
} catch (Exception e) {
O+ C7 r+ z+ W1 t9 j" t System.err.println ("Exception stepRule: " + e.getMessage ());8 H: z* h% t" ?
}
7 I! N3 f0 R" v1 D( ^* T8 @' q7 A' p/ G( p( K& Z& v
try {% V6 x! n- @( q+ B: J' F5 W' L* Z
Heatbug proto = (Heatbug) heatbugList.get (0);
) l r2 Y& f/ \. p. e p& q4 M Selector sel =
5 t9 K7 w& \7 P new Selector (proto.getClass (), "heatbugStep", false);5 Y" o% O: \+ d! ]2 `# U* z* c
actionForEach =
/ j6 O4 V- ?4 Y n. K7 M, k+ k modelActions.createFActionForEachHomogeneous$call; e. T5 G* ]# M1 m. _# Y5 b
(heatbugList,
, D3 ?& c0 Z# ^ new FCallImpl (this, proto, sel,
1 _! u5 u' u& A# Z# F7 H% d5 j new FArgumentsImpl (this, sel)));
! a( G" q6 Y' ~- @" c } catch (Exception e) {
: Q1 ]6 Z( @* t% ]( k e.printStackTrace (System.err);
) ]$ [5 T0 I! z( }4 J9 o( [ }
& F& Q+ M1 m5 w5 i+ f& B" a
( O. S2 A* V( R% ?( d2 O" k syncUpdateOrder ();
7 L7 g( e8 m2 C( s3 ]
8 r" d7 @! P2 `7 O+ g7 u) [ V& [ try {) p& S% }/ F& y2 F$ X' S
modelActions.createActionTo$message 7 H" C2 B; N# d' Y1 [
(heat, new Selector (heat.getClass (), "updateLattice", false));
( f4 ?+ X2 J' f7 } } catch (Exception e) {2 c2 X% Z4 l& B& O6 l! x0 c) ?
System.err.println("Exception updateLattice: " + e.getMessage ());
8 q+ L, I$ Z8 K/ p$ a: }, @ }
; C( R T1 `9 S1 x 3 m: }1 `, u: e* d: [1 d: E
// Then we create a schedule that executes the9 a$ w. X- c/ e! B7 w, O! E; F- c. K
// modelActions. modelActions is an ActionGroup, by itself it+ M+ z* S+ q+ x
// has no notion of time. In order to have it executed in
3 c- Z( w$ d0 ~9 x0 S$ N5 C" R // time, we create a Schedule that says to use the
9 U8 Q3 G( {- Q4 u // modelActions ActionGroup at particular times. This
" I& ]% R8 V, r' O; P! u' ~6 X // schedule has a repeat interval of 1, it will loop every
% z" Q2 a7 R9 h" E // time step. The action is executed at time 0 relative to
: t+ Y5 r! z* J% E# n // the beginning of the loop.4 t4 m( t# n3 I9 i6 u4 M$ f
' Y7 F( Z. @% c8 b/ \ // This is a simple schedule, with only one action that is
- X- ^2 x9 L* b } // just repeated every time. See jmousetrap for more
) h& a0 m+ ~1 A1 ? // complicated schedules.: j8 }7 h2 z9 G6 n5 R
& y) x' x8 C3 V) @3 b) t modelSchedule = new ScheduleImpl (getZone (), 1);
' S: T3 F( Q2 ]! v6 Q$ T1 H modelSchedule.at$createAction (0, modelActions);; ]; ^% o$ y& U1 E% b+ V
7 o6 o q% `0 s; N3 b F% i# @% K return this;
u+ I; z- K q" `7 b# F } |