HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
z' |. A! N* ~ z. d
5 f4 k3 r, `+ v public Object buildActions () {) B; Q' k& d/ Q& ^! Q5 I( c# w+ x
super.buildActions();
; Y W. c: H% _! P
4 E2 _* o& ]* S+ F4 W; A // Create the list of simulation actions. We put these in P" F9 K; f7 V% r
// an action group, because we want these actions to be
5 t* E2 F6 ?, G8 n/ ] // executed in a specific order, but these steps should
& x d7 {7 D/ X/ a // take no (simulated) time. The M(foo) means "The message/ n) K! u; m9 _8 {4 Z" r3 ?& o
// called <foo>". You can send a message To a particular" _ v7 _7 }3 ]& e; p) c. n; ]+ M
// object, or ForEach object in a collection.* f( O6 H) t, ` p; S/ j
^; ?8 w! c, v* \ D // Note we update the heatspace in two phases: first run/ A2 I/ ?8 Z9 Z+ O5 Q8 ?& G& B) A& D
// diffusion, then run "updateWorld" to actually enact the) {8 H7 ~& L3 p( b7 n8 p
// changes the heatbugs have made. The ordering here is
7 T% E' j3 L8 O5 Y // significant!7 E/ M1 n! h0 R% v h' j7 X5 V
4 @: s+ h( A4 v* ^2 w/ d0 D: a5 q // Note also, that with the additional
" H- L- n; x# `6 q( m/ s // `randomizeHeatbugUpdateOrder' Boolean flag we can
2 M% a2 D; x/ n0 G' A# T/ V m // randomize the order in which the bugs actually run
( S& R# j& L. I8 Y# t$ V! }7 C7 A // their step rule. This has the effect of removing any
( E; m7 @8 t* r! E' E: ~ // systematic bias in the iteration throught the heatbug, w5 R6 f3 W, F {4 ^
// list from timestep to timestep
' t! V6 ~2 e; O( R" [0 ~
9 ^9 q# l- H4 y7 X6 X4 c // By default, all `createActionForEach' modelActions have- U+ \/ S3 A" e3 M
// a default order of `Sequential', which means that the
+ e& U6 z7 w3 v // order of iteration through the `heatbugList' will be9 H2 t" ?; L* h6 R1 a8 L, c
// identical (assuming the list order is not changed
8 r0 r" ~+ I+ a4 }. @) g // indirectly by some other process).
* w+ w y4 u9 g; a ' M0 t+ e: v$ n) h! V) Q% S
modelActions = new ActionGroupImpl (getZone ());+ F1 z, h" y* h% a
9 K/ ]: N0 \' V try {, J+ `: c/ t# V) E7 \
modelActions.createActionTo$message6 m& v( I' s# ^/ R O
(heat, new Selector (heat.getClass (), "stepRule", false));1 q( _ D/ e7 ^
} catch (Exception e) {6 Y& v! s* g% T, v) F' f
System.err.println ("Exception stepRule: " + e.getMessage ());
$ M" B' n7 ^& r7 ?9 [ }
# G9 ]7 x" e) ?
) \: I& \+ U v try {4 u3 ] f, x# O* T2 Y9 J/ F- O
Heatbug proto = (Heatbug) heatbugList.get (0);
7 I& E+ ~) n9 q0 V Selector sel = 4 g) `8 c% ]/ L3 M7 i
new Selector (proto.getClass (), "heatbugStep", false);
' S. k) U5 l0 E* x" C" p5 Z actionForEach =! ~% E p. L5 i* v
modelActions.createFActionForEachHomogeneous$call
1 _7 L7 i# Y; [5 |5 _ (heatbugList,
8 n9 S! S7 S8 W) |7 w3 Q0 e7 K5 u; X new FCallImpl (this, proto, sel,
( T1 D, Q! n2 A5 A% |4 N new FArgumentsImpl (this, sel)));
0 U' r( e/ k0 ]5 ^$ ~8 t } catch (Exception e) {
7 S$ W" u! B% d. P5 v' v e.printStackTrace (System.err);
: | h: R: ]* Z& k+ s. t3 O }
+ C" C: h3 P' I1 H+ N
8 P& y3 Z+ d# \2 Y% y; z& P syncUpdateOrder ();5 X4 W5 G5 h, {
K7 C) b f! d" M- q' q try {. h% `$ J, h( g
modelActions.createActionTo$message , }1 A3 B& ^' i& g2 d" ?3 k
(heat, new Selector (heat.getClass (), "updateLattice", false));
0 n0 Q9 q$ h9 H3 s } catch (Exception e) {) d$ I. i, `3 Q) |5 G2 z# A
System.err.println("Exception updateLattice: " + e.getMessage ());
1 a8 O3 O2 y' V7 ]; F }
" t1 C4 z2 I' [
: X8 q0 w% _+ T9 ^' R" C // Then we create a schedule that executes the
8 R# U2 i7 N6 l; g$ q0 Y // modelActions. modelActions is an ActionGroup, by itself it
7 w9 x+ w% G" C$ {, j: _ // has no notion of time. In order to have it executed in! {2 `+ p9 x0 _+ j0 Q! p
// time, we create a Schedule that says to use the
8 O5 J& _ }' \/ U$ F e // modelActions ActionGroup at particular times. This; J+ X( I( o9 Y. ^# B
// schedule has a repeat interval of 1, it will loop every! [. s: v8 O4 S6 G! m3 s, \% u
// time step. The action is executed at time 0 relative to, q4 _. J2 B2 r8 q- ^' ]8 T
// the beginning of the loop.
) i0 ~0 M9 N' V) a9 M
( f) e2 |3 t7 [3 i0 D# I // This is a simple schedule, with only one action that is( H' h& ]6 N3 t) U8 U( j4 G
// just repeated every time. See jmousetrap for more
: l5 X4 _7 m2 X+ E, E; I // complicated schedules.
1 \! j9 l+ ?, ^! y, e
- o, K- R. F c' ? modelSchedule = new ScheduleImpl (getZone (), 1);
* ^! |# @, I8 b& k modelSchedule.at$createAction (0, modelActions);
9 t5 g% R$ u( k' x. K
6 D# d& m# B" _: C. ?! X/ B: f$ H9 ~ return this;
) L' D, ?7 e" e } |