HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:6 v# m+ f8 t6 L0 S/ k
0 a# v( H2 V3 S/ p; s
public Object buildActions () {4 P1 c- ?: o; ?) t
super.buildActions();
1 q$ b+ I2 X# ?5 t0 V: K% w) Z4 T 7 x8 ?! N6 M& o4 i, d
// Create the list of simulation actions. We put these in
2 v0 p( _( Q, w* G9 T // an action group, because we want these actions to be
- k: M r, {: D2 h // executed in a specific order, but these steps should
: p! [7 r+ C4 ` Q# j3 q // take no (simulated) time. The M(foo) means "The message) f. A+ s6 a: D4 }8 w9 o, K
// called <foo>". You can send a message To a particular
* O! g6 ~: } `% R; c8 D7 D // object, or ForEach object in a collection./ g# k) j/ T5 E: P7 o6 m2 O+ D& q
# h7 }* j Z2 p6 Z3 r& Q // Note we update the heatspace in two phases: first run! @$ X% S e, c+ \7 j
// diffusion, then run "updateWorld" to actually enact the; p5 P* ?( d3 P# W1 \( S8 \
// changes the heatbugs have made. The ordering here is7 l+ H* s7 Y: r5 [+ O& f$ D
// significant!
2 a" _5 f4 A! H* D; S
! A" R, d: G7 s5 V+ f. W // Note also, that with the additional
6 U. y. u3 T% h$ w% F# c // `randomizeHeatbugUpdateOrder' Boolean flag we can
8 Z5 d- Q: t/ |! _: d; f // randomize the order in which the bugs actually run
' l" ~+ }6 }# Q0 l // their step rule. This has the effect of removing any
$ Q% z0 X# K8 @; v // systematic bias in the iteration throught the heatbug9 Z% O R g; [7 s- y
// list from timestep to timestep
+ r5 B8 B2 l5 ]5 @4 J( y, Y- Z
# T0 G) P$ \/ X3 O6 b' _; q // By default, all `createActionForEach' modelActions have
6 Q, F' e$ w! { // a default order of `Sequential', which means that the
0 O1 t" c7 ^1 i* ?1 a // order of iteration through the `heatbugList' will be
# K& P1 {" U4 E+ { c! d- k; B) s // identical (assuming the list order is not changed0 T f* ]7 w, V& v- r
// indirectly by some other process).; h, ~ o, N1 B( G2 T' ~2 i) v9 A' `; G
0 h+ i+ f& S8 Y8 h: F i6 ` modelActions = new ActionGroupImpl (getZone ());9 K4 ^. `5 r* I/ }6 X! q
5 @+ v3 C: w! h- v$ _ try {
' z' J* y; |" |3 Q+ J( r" O5 b modelActions.createActionTo$message
`$ k3 j5 v* ^2 G* j2 p& V (heat, new Selector (heat.getClass (), "stepRule", false));
4 F9 A' } J! n5 ~" e2 g } catch (Exception e) {) V5 {2 r9 P/ _ z/ A
System.err.println ("Exception stepRule: " + e.getMessage ());7 i* ^$ l; g% Q Z$ K
}
4 _' T4 V* @8 p0 X% |' q% w" i( h7 j$ d3 E* v
try {3 w) u! P" W3 P& W: \5 h
Heatbug proto = (Heatbug) heatbugList.get (0);
2 Y9 n [7 L' ?$ D/ \- Z Selector sel = L& }# i1 d; Y0 A' A& z3 b4 f
new Selector (proto.getClass (), "heatbugStep", false);1 b% p$ N+ I" c9 x
actionForEach =# r' W- {& j& k- C6 x+ y
modelActions.createFActionForEachHomogeneous$call
' W2 n' Z2 P$ h& c8 G$ R0 ~ (heatbugList,
0 ?) L0 S; M6 y' c+ L/ V1 { new FCallImpl (this, proto, sel,7 u6 s" t# s; G& R
new FArgumentsImpl (this, sel)));
& b8 Y7 W$ J" ?8 K/ o! C% J } catch (Exception e) {" I3 q+ D3 w! j, }' u! @
e.printStackTrace (System.err);
W8 b7 @! g* q# C }
9 N U7 F- E& ?4 r( a/ @, L! E0 B( G
. I& D( _9 Q& j( R3 z' x* b j syncUpdateOrder ();
, I' [: y; U0 H' Y9 B$ ] A/ w. U, u4 t, t6 {5 Q
try {" V) }4 z1 y2 L& o) p3 Q
modelActions.createActionTo$message
) B$ @' S+ @0 l (heat, new Selector (heat.getClass (), "updateLattice", false));
0 d, c: {- O1 K5 T4 j' ^# O3 c } catch (Exception e) {
* [& P2 g8 I" ^2 @ System.err.println("Exception updateLattice: " + e.getMessage ());) A: C( \% F( M
}
- [& [! f5 P/ F; \/ U & C0 V( A$ ^/ E! E4 K3 q4 U
// Then we create a schedule that executes the+ d8 v+ _9 L, E0 l4 A
// modelActions. modelActions is an ActionGroup, by itself it l/ x. @8 }4 B. K; a2 m8 W
// has no notion of time. In order to have it executed in, D4 ]0 o, S$ I$ }, u, j( r+ v
// time, we create a Schedule that says to use the
0 @, _. q* B, M; F6 T // modelActions ActionGroup at particular times. This
6 d0 p; i. T a // schedule has a repeat interval of 1, it will loop every) W8 J; d$ c7 {2 c" j; ~9 J
// time step. The action is executed at time 0 relative to0 [% _ q0 \" Y _8 J1 |- ~
// the beginning of the loop." F7 r9 ~0 {% P
v) H, K0 m7 S1 d$ _7 I6 S
// This is a simple schedule, with only one action that is
$ Y& a( N, {# O // just repeated every time. See jmousetrap for more
9 y7 C4 u3 o/ k% I5 C. A9 Z T1 r0 ^" q // complicated schedules.
' @6 b% ^6 Q- ]3 _: A: J3 R
& S4 Y/ o3 J; I, b: [ modelSchedule = new ScheduleImpl (getZone (), 1);
' [) D: s8 x/ K" Z) Q modelSchedule.at$createAction (0, modelActions);) s/ |: w" g6 a$ Z/ j% z+ u
2 p6 e/ |1 e3 L return this;' j! A2 x* z! [9 Y4 F: \' Y6 ?
} |