HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:6 g6 k* n: A' v. c g
* c- }/ P( t: s public Object buildActions () {
+ V3 Q' H, q/ T% [9 D3 J i super.buildActions();
- R& v. i# H5 W2 F1 g
! E0 _( m, B) ~/ A* G) x! m // Create the list of simulation actions. We put these in
* ~" h! I5 l8 Y- r% ` // an action group, because we want these actions to be \8 | t% X- v6 ^
// executed in a specific order, but these steps should
: R( F! i: K; ~$ K- L: f // take no (simulated) time. The M(foo) means "The message
& h3 Z4 N, F% u% a // called <foo>". You can send a message To a particular
4 F/ g$ A; K9 b! T( I // object, or ForEach object in a collection.# |( h: c. t6 c- K+ E
# p( y6 V2 g7 v5 c( Y+ G1 t, y // Note we update the heatspace in two phases: first run: y! T3 ]2 |7 c& r6 r& ]$ N
// diffusion, then run "updateWorld" to actually enact the
9 L# Z4 i3 A' w( V. ? // changes the heatbugs have made. The ordering here is+ V1 }( L/ z/ b: F) u( e
// significant!
H/ ?$ L' H. k) `2 U" g" J 4 P- K2 a4 X9 @7 H7 u, U) |
// Note also, that with the additional
( {" n) ?8 ^0 B1 }! ?* X // `randomizeHeatbugUpdateOrder' Boolean flag we can
4 ?( i# v0 D: U // randomize the order in which the bugs actually run' r$ z- q+ ?* m
// their step rule. This has the effect of removing any
$ y- k- l4 ^3 H3 E // systematic bias in the iteration throught the heatbug
, n! l# ]* a& B/ v5 Y7 t // list from timestep to timestep2 i- }$ ~ R( k9 {
X8 Y; n' W% b6 s
// By default, all `createActionForEach' modelActions have
+ C$ z# K, D, A7 J( s // a default order of `Sequential', which means that the
* W) x: }9 Q* R3 F% f" p // order of iteration through the `heatbugList' will be
5 B+ ]% y" k& ^, }% u // identical (assuming the list order is not changed
2 z$ Z- |% P/ W3 e& B // indirectly by some other process).$ |9 v; J$ G/ r
6 |' X6 G, J' L. \ modelActions = new ActionGroupImpl (getZone ());. L- d- |: t* q5 I
6 ~6 |2 D+ h3 U E, i try {; G" X, G( W- c2 N% E% v) U
modelActions.createActionTo$message
, ?- U; c' ^9 w3 X (heat, new Selector (heat.getClass (), "stepRule", false));
) c3 p. ~5 s8 \( F! H) ` } catch (Exception e) {1 p( u. _, r* W
System.err.println ("Exception stepRule: " + e.getMessage ());
3 _: D. V+ r2 t! S5 Q }
* o" f2 l( a2 q0 ^, P5 a& q1 ]. H: t
! h+ E1 T% N- o' J' B; K+ `5 y try {
; X7 Z$ M- v7 w8 ~. h' e g Heatbug proto = (Heatbug) heatbugList.get (0);8 I1 [4 p' ^( v1 i6 u: t
Selector sel =
# Q& ?4 L' L3 x new Selector (proto.getClass (), "heatbugStep", false);
4 X1 H, N! \" G2 V actionForEach =
; g4 ]- T3 p$ c3 X1 R: l, H- F6 r' ` modelActions.createFActionForEachHomogeneous$call* s6 ?- I. u. B
(heatbugList,6 s4 t$ I7 M9 \
new FCallImpl (this, proto, sel,% S6 H3 }, |2 C/ \' V
new FArgumentsImpl (this, sel)));
- t4 ?" b% c' ?' G. _% t } catch (Exception e) {6 w2 W: ~2 M" z* C7 {: v" o0 k* r# H
e.printStackTrace (System.err);
9 ~1 X& ~( V, B0 h }* w8 Y3 S! R2 F- L3 H
3 B S& I# g7 b- r
syncUpdateOrder ();
# n6 u0 O9 S: i$ G0 O2 g6 L+ _5 b
try {
4 ~: v8 F D. J modelActions.createActionTo$message
5 w1 A' z" o8 {9 n (heat, new Selector (heat.getClass (), "updateLattice", false));& @2 V& l! a* x" h/ u" r( }
} catch (Exception e) {
1 Y8 h q- H2 a( D- s( y: N System.err.println("Exception updateLattice: " + e.getMessage ());7 @4 V& K3 s1 t
}
, w6 Z* T3 G H) m# _- J * K4 P) k* O+ G, @% d: ~+ V8 ^9 ]
// Then we create a schedule that executes the
! k/ Q% {3 h6 h C. f& P // modelActions. modelActions is an ActionGroup, by itself it
# ^( i3 ^( S2 d4 m6 X // has no notion of time. In order to have it executed in$ U% X. e' W' n# E) l7 }
// time, we create a Schedule that says to use the
; k1 [- o0 M' ~! ^1 N+ ?4 s // modelActions ActionGroup at particular times. This
5 S5 K+ u0 x8 R L // schedule has a repeat interval of 1, it will loop every+ ^& p+ f4 e2 c0 m0 `
// time step. The action is executed at time 0 relative to0 d: u$ Q% J. s- O! m
// the beginning of the loop.
; u3 g' b& E1 U: w/ T, k, ?5 \/ x+ y' v. K
// This is a simple schedule, with only one action that is5 c7 w! b8 F# Q4 W- X- ^0 n
// just repeated every time. See jmousetrap for more2 {) z9 d) H) P t3 V
// complicated schedules.
. a1 e f8 c7 T# p. i6 L" ~ 6 ~/ d1 h+ @6 b% _5 J9 g* L( l' S
modelSchedule = new ScheduleImpl (getZone (), 1);3 E* [8 |7 L: a" I& o1 C
modelSchedule.at$createAction (0, modelActions);
! P H) `! ?/ Z1 C" ^$ D# E
/ O' D# v) r* Q3 \* v+ y/ y return this;, L! b3 S4 `' G7 k1 o& [; I' O- z
} |