HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下: N$ r- v7 P$ T+ T( L: b6 @
# X/ T6 N9 C2 E9 P' k4 u$ p public Object buildActions () {
( J& |" o( G9 Z v+ @4 {3 I0 [( b; B super.buildActions();
9 r9 C& F5 e% B1 h
5 z1 V! n+ F, S w // Create the list of simulation actions. We put these in9 ~- c( q( h! O, D
// an action group, because we want these actions to be
+ I2 S9 D9 d# k // executed in a specific order, but these steps should$ u+ v0 [- M; M
// take no (simulated) time. The M(foo) means "The message J# M% C4 M+ ?1 e- N! Q9 L
// called <foo>". You can send a message To a particular* A `* O' x" n, k, A
// object, or ForEach object in a collection.
3 t7 o. i& b; q6 I# w0 | : V6 B% I, l5 A$ o2 \3 i% a
// Note we update the heatspace in two phases: first run$ D# Q/ M. m$ r4 K" M
// diffusion, then run "updateWorld" to actually enact the
/ r2 F" ]) y. M# T- b: m7 ] // changes the heatbugs have made. The ordering here is1 @. X9 n( C, M/ j- i" P
// significant!
- y& t! Y% _- L6 i6 r2 A3 v) Y g
6 ]$ {* _! \6 ], t1 j/ i // Note also, that with the additional5 f$ o& ^# ]3 ~2 [& S
// `randomizeHeatbugUpdateOrder' Boolean flag we can& H: B2 m" y0 x( u$ |; m4 B
// randomize the order in which the bugs actually run. }/ `6 S& i+ i; |4 |- Q8 w
// their step rule. This has the effect of removing any% c1 S6 K$ T8 {3 V/ k
// systematic bias in the iteration throught the heatbug. g4 [0 t% Y4 \/ d3 w+ A' W* K
// list from timestep to timestep& h$ t* ]/ l+ q& {6 g& n+ e1 z- s
/ t; e m; V: b Q // By default, all `createActionForEach' modelActions have
4 l& h; a# u7 q4 Y/ S& @ // a default order of `Sequential', which means that the
. S5 }$ R. E) a; |6 K" o& j& L // order of iteration through the `heatbugList' will be% V* d6 Q- K, j
// identical (assuming the list order is not changed8 w7 \, }5 Q% ?! s9 { K+ p5 x
// indirectly by some other process).5 L- g- W( ]1 P: i# d
7 {9 W8 H. ?5 k5 ?% C modelActions = new ActionGroupImpl (getZone ());
! d& c" z/ I! y0 n& Q/ n
9 M5 c$ M9 C( n* d. X8 @5 q S try {' W9 W8 e6 ~% E' V: o
modelActions.createActionTo$message
1 q# h$ C: M6 S/ k$ f$ z (heat, new Selector (heat.getClass (), "stepRule", false));
3 u% S# S; w2 Z+ G Y, [ q+ N } catch (Exception e) {+ L ~: Z, ~; m& a$ [1 O
System.err.println ("Exception stepRule: " + e.getMessage ());5 g. @4 _& \' g7 D
}) ?- Y* T8 ]: s
6 V# x; j5 o+ E$ D9 Y. U3 Y
try {" ^( d7 F2 n5 j1 }$ f% F h
Heatbug proto = (Heatbug) heatbugList.get (0);9 K% J* |( y' N) y( K( A+ |3 j' r
Selector sel =
) [, Q* Y0 Y1 D) w new Selector (proto.getClass (), "heatbugStep", false);1 V" D* y# A3 k5 ]; |
actionForEach =. h) q0 k* g+ I3 w9 V/ `8 t4 O5 Z
modelActions.createFActionForEachHomogeneous$call7 H3 Z: m; B/ A( ?! |- a
(heatbugList,+ F8 o+ o6 ~8 U% m" l/ N& f
new FCallImpl (this, proto, sel,
3 g+ M2 ~) V. |# s; \ new FArgumentsImpl (this, sel)));
* p4 U$ |! a0 D } catch (Exception e) {
+ w+ n+ Z3 w6 N2 ]3 y$ a e.printStackTrace (System.err);
2 f J8 j9 Y- T, o9 p5 G; y4 [# ~ }3 A0 W$ B) B* V- x
8 ^# |& \. [1 i& {* m' [ syncUpdateOrder ();: R2 q- k; n! \5 R" I/ h4 L
9 H9 c ]/ r6 u& j% C9 E
try {+ n4 [9 z& X" `( y1 L
modelActions.createActionTo$message , i5 e: L" @7 } p; s& M
(heat, new Selector (heat.getClass (), "updateLattice", false));
& P& }* u8 n. ~( G. z) K7 C } catch (Exception e) {0 \7 l7 Q, @1 e, E# F1 ~- M* B
System.err.println("Exception updateLattice: " + e.getMessage ());! C4 t0 h2 Y1 |4 _9 s( I! ^
}1 X2 r2 I& k: I' H8 G3 e
; A7 u/ ^ T! A1 G0 g
// Then we create a schedule that executes the& l) Y4 I5 Q, N0 `
// modelActions. modelActions is an ActionGroup, by itself it
7 O' R% i3 j' ]1 O M( M! S, k // has no notion of time. In order to have it executed in+ Y. t) }0 L. l8 I, `: ]3 g) t, q
// time, we create a Schedule that says to use the
, m) X* |0 k! |) V // modelActions ActionGroup at particular times. This5 j9 m' F9 I$ G- m# ~
// schedule has a repeat interval of 1, it will loop every
$ y/ Z$ c- e; P, t+ X1 y // time step. The action is executed at time 0 relative to
1 w9 |+ {6 z* }3 ~5 ^( D // the beginning of the loop.* r* k$ o. i8 [. w
5 m. i' ?3 U% b" W // This is a simple schedule, with only one action that is' H! x2 W; ~2 c" ?: S# }! W
// just repeated every time. See jmousetrap for more; u I; g0 K; A$ k
// complicated schedules.
' d, `1 s* d" v0 @
/ Y* n% {2 h/ t; [, K7 F modelSchedule = new ScheduleImpl (getZone (), 1);
4 ~# S* j$ N0 h/ \) l) K modelSchedule.at$createAction (0, modelActions);, D$ t* M9 v, r( a) ~8 X2 Y
+ ?# D) W. J4 E& m( z, ~2 \2 S( e
return this;1 {( B: z5 O4 f0 u/ c% w# ?" C
} |