HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:6 P) G* S0 m$ \2 C0 ]* N
0 j, f; Z9 Q- d! x1 G public Object buildActions () {# ]* X4 ?# L6 `' q" b' U" j
super.buildActions();
7 X5 Z; O, y) y% Z# M% s! I
- y0 `! c! L( B8 i. k // Create the list of simulation actions. We put these in4 L8 [6 G' |* G& Q
// an action group, because we want these actions to be7 Z$ ^6 w. @* z6 Q' Q
// executed in a specific order, but these steps should' c }1 N2 @: J1 p+ k! v! ]: Q ]0 X f& q
// take no (simulated) time. The M(foo) means "The message7 @! a( p0 m9 V' f! G
// called <foo>". You can send a message To a particular8 w1 w, A& C9 c' d) k
// object, or ForEach object in a collection.8 b# S: x. L+ `, q: P. K
" O9 W4 C% u8 c: s: Y // Note we update the heatspace in two phases: first run
( g6 h7 A5 o1 A/ Z' K // diffusion, then run "updateWorld" to actually enact the
1 k! N" f; @1 T6 v$ ~8 L // changes the heatbugs have made. The ordering here is
- G6 y0 `* K3 X( `3 I ]& |4 p // significant!
/ |4 o6 L( ]' h! i+ Q
- e' N+ [ Y$ d // Note also, that with the additional9 _: h, H$ o0 K* A* Y
// `randomizeHeatbugUpdateOrder' Boolean flag we can
# Q$ V+ j$ o/ S* F# I) s; ], j // randomize the order in which the bugs actually run
( \& i0 j1 M6 r // their step rule. This has the effect of removing any C9 X" O5 h+ T
// systematic bias in the iteration throught the heatbug
% h/ i, M& f( W( h // list from timestep to timestep
/ ?/ p3 n; `+ q; O4 N
0 J4 E- W" D% f% L( p // By default, all `createActionForEach' modelActions have" u. E% f0 c% p7 M' q& `! b0 e; \- z
// a default order of `Sequential', which means that the7 B" g9 ]' E o0 ~: y3 S+ A
// order of iteration through the `heatbugList' will be3 V: G7 x5 W( K1 { f0 j
// identical (assuming the list order is not changed
% _9 |; ` L8 r3 E4 f- E // indirectly by some other process).4 D% ?% v& i0 u! f
9 _$ N: u) x! V: f" \: `# p
modelActions = new ActionGroupImpl (getZone ());
9 B' ~ j% t, k; o2 R$ T- m/ n
' Z$ y* C+ v% r4 H* E2 J+ A) r' r5 | try {
/ Y9 e: Y; w2 j7 _1 K. s. v modelActions.createActionTo$message/ T5 O* R: r. _, J) Y! @. ]
(heat, new Selector (heat.getClass (), "stepRule", false));, v- C7 P" M$ N E' L
} catch (Exception e) {
5 \% e5 w2 W3 K. Y5 z) u8 N System.err.println ("Exception stepRule: " + e.getMessage ());/ U% D0 U- J$ ]/ ~- M- ?4 H% m8 c
}
/ j3 X/ q' X5 a' r) D) C8 H N
) f, J5 e4 }0 e try {
% m$ k1 I, t3 q+ t Heatbug proto = (Heatbug) heatbugList.get (0);: c8 K1 E9 y9 D, s/ m+ o" {+ F
Selector sel = 0 a: h0 G1 f& Q& N) u4 F
new Selector (proto.getClass (), "heatbugStep", false);
( E" H( O2 Z4 z, v' j actionForEach =2 Z' a( B- x9 w# C$ Y7 f8 H
modelActions.createFActionForEachHomogeneous$call
& G8 [+ U _" u/ n* p1 }9 ` (heatbugList,
7 Q, Q* p8 u/ r: M% |, ? new FCallImpl (this, proto, sel, H- t, h3 E! p4 m* C3 O) V
new FArgumentsImpl (this, sel)));1 m$ D' w# v# K/ A
} catch (Exception e) {
( D m" \4 h! N2 T) c; ] e.printStackTrace (System.err);; K5 v) {9 e5 w5 B8 T
}
$ j \+ ~3 I- {% |; b
0 T/ N5 X8 M; p0 ]- |" Y syncUpdateOrder ();
5 | Y. O4 l7 A
+ L3 B7 m9 a C% B8 \6 w9 @ try {
4 p5 _$ N" u) ^9 u5 |. a modelActions.createActionTo$message
8 Y) F; e& s% |1 Z0 p7 l- t- N) c (heat, new Selector (heat.getClass (), "updateLattice", false));
* @6 O7 ^, `" X: R1 }1 A" |& P$ j2 p } catch (Exception e) {# ]8 \& w; I9 }. }+ N. `
System.err.println("Exception updateLattice: " + e.getMessage ());
' `2 I6 h3 J' X! n8 m! S' y }: a4 X/ K- @3 Q6 s
+ |+ r. O9 H' |- n3 M+ ` // Then we create a schedule that executes the
2 y# Z) Y1 k' W- F! a3 l) {3 X // modelActions. modelActions is an ActionGroup, by itself it
! k: C8 J& n; N9 }8 _$ v // has no notion of time. In order to have it executed in
* Q1 W: C3 M3 I5 y, q // time, we create a Schedule that says to use the
+ {& M4 O4 D1 Z: {$ u# t // modelActions ActionGroup at particular times. This9 H8 i6 H) J3 z* x1 H! {
// schedule has a repeat interval of 1, it will loop every
0 `/ X. g3 p$ W. [$ P, Z // time step. The action is executed at time 0 relative to- Y- A5 M3 b" S9 v
// the beginning of the loop.2 {! W+ f2 p4 G. ~# h
1 ~/ E5 X9 ~: E+ s2 L // This is a simple schedule, with only one action that is
5 R4 ]7 n. _/ _2 G$ }7 n // just repeated every time. See jmousetrap for more5 O- u; D9 J5 U3 B+ N$ G8 T- J' h
// complicated schedules.* E1 A/ Z9 D' V7 s' H4 U
3 v9 q1 x! B7 n4 t* r* W' X modelSchedule = new ScheduleImpl (getZone (), 1);7 J2 b* C2 f, c1 ^: ?2 {" m: v5 W- ?- W
modelSchedule.at$createAction (0, modelActions);
& N) @: C y2 U, r1 S ' p) V( Y5 ~4 z/ r9 `8 S- @
return this;! ^) D9 V8 |1 q# \3 m F3 N: u
} |