HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:' R1 \' v* C/ i9 l
7 H5 }9 h8 B$ ]9 O
public Object buildActions () {5 K- \5 j" I C' @/ f9 i% f
super.buildActions();
+ n% {. W* v7 j9 Y! Q" q& P% A ! T, I: ]& d# l5 C
// Create the list of simulation actions. We put these in, s, K8 s" s/ d$ h
// an action group, because we want these actions to be
% B2 l* E! w1 H: U8 @ // executed in a specific order, but these steps should) z a% a& r8 q
// take no (simulated) time. The M(foo) means "The message2 V! O2 R5 R0 w, o3 H, d' B
// called <foo>". You can send a message To a particular9 ]0 E6 f2 H1 \& B( a- b9 r
// object, or ForEach object in a collection.
# K8 O5 g4 z/ t b3 J, w) n4 R * {0 F+ W' n* s% l4 f" N
// Note we update the heatspace in two phases: first run; o1 a' U& ]( @0 N [- Q/ Z: @
// diffusion, then run "updateWorld" to actually enact the
1 q/ |: E5 j' s" Y! r7 E5 }! A // changes the heatbugs have made. The ordering here is
( u. p# s3 A' j# j // significant!
. k2 j! @" f) f; ^1 P, F $ p7 U. a% q& a. z! k" v8 K3 W. X
// Note also, that with the additional
9 ]! R' w# |8 }: X% \% n, T2 { // `randomizeHeatbugUpdateOrder' Boolean flag we can
$ a, l. t: Y& g9 o4 C. Z // randomize the order in which the bugs actually run
3 p5 H2 Q, W0 x. x4 f- l // their step rule. This has the effect of removing any
' v1 s% N+ t9 G8 L2 F' Y // systematic bias in the iteration throught the heatbug/ y2 E& ]# j+ k2 w7 @
// list from timestep to timestep+ U) x1 A" \' D2 M+ f, } T
" t4 A4 r: [, [8 |6 E // By default, all `createActionForEach' modelActions have
j: Q* U) W7 {0 ~5 r4 y# M // a default order of `Sequential', which means that the
& Z4 H! `+ L9 ~; v3 j; S1 n% h // order of iteration through the `heatbugList' will be
" \3 g. i! B$ y: G // identical (assuming the list order is not changed
+ z* Y, F" z% D/ r# u' U // indirectly by some other process).) D+ [2 c7 n- R. Z- J
* Z( Z- E2 {6 d1 J, F( r# R
modelActions = new ActionGroupImpl (getZone ());
% y, T- H) P$ w, W3 n4 G. R% e
! a4 | e- H2 }9 S try {
5 k1 L1 J% _2 M4 g) X) c, K modelActions.createActionTo$message
N2 k5 P7 }( ?4 ?0 x* d (heat, new Selector (heat.getClass (), "stepRule", false));+ F9 Y5 e" v& y: M9 N$ G
} catch (Exception e) {
3 m. j) s, v& b7 p+ ^* C System.err.println ("Exception stepRule: " + e.getMessage ());
+ B+ V. k2 U& p- @6 g2 _0 q% S ] }3 a% v+ U; f) v/ z: \
7 T t2 ^/ E* w. D try {
( A9 H; N: m o Heatbug proto = (Heatbug) heatbugList.get (0); F9 R# W2 {8 O/ x# y) S# ^
Selector sel = , Q8 D7 ~" b7 Z$ B
new Selector (proto.getClass (), "heatbugStep", false);0 P% j5 x( `) J- g& I7 {
actionForEach =
, d9 _! t2 N- H1 C$ D T: n modelActions.createFActionForEachHomogeneous$call( i V$ ?/ @ I- Y4 O
(heatbugList,
4 G$ A4 u" j; | new FCallImpl (this, proto, sel,
: s4 o E/ c4 F4 |& f. l6 y0 [* n new FArgumentsImpl (this, sel)));, O: m$ f+ i9 U4 R* X M
} catch (Exception e) {
4 y) {8 B$ o! [! i7 K7 z; Q$ U e.printStackTrace (System.err);
) ~3 W# u2 Z4 A0 ^$ p3 X8 B }
; j! C% M! e- Y/ ^, R, m * @& N- f* G% e; [' r) H
syncUpdateOrder ();
4 e. T& U m" V% J% |8 v7 E) M0 |5 P/ | U" R3 Z5 w
try {$ g# ~: J2 [$ r! c+ U
modelActions.createActionTo$message " c+ u* D: _0 t" k; x# h& W5 ^
(heat, new Selector (heat.getClass (), "updateLattice", false));$ w/ P6 [. @* |" W p' Z* K
} catch (Exception e) {
) v. Q0 \0 V" V; E System.err.println("Exception updateLattice: " + e.getMessage ());
& J" x- O; E* j0 F( U7 q }
0 i5 ~( ]5 v6 y1 @; t. H
1 l, o1 M% {1 m$ J2 t: s3 r // Then we create a schedule that executes the& `3 r* Y2 i1 @
// modelActions. modelActions is an ActionGroup, by itself it
' I2 I" j9 n8 P) p6 c" p) W // has no notion of time. In order to have it executed in. i7 \* O. L: r4 {
// time, we create a Schedule that says to use the! I, L5 R8 m% D. G6 g
// modelActions ActionGroup at particular times. This
0 J& F4 _# y9 m7 [ // schedule has a repeat interval of 1, it will loop every
1 G% P2 v G' b // time step. The action is executed at time 0 relative to5 }. U2 |& T7 d! B$ l
// the beginning of the loop.) y' P" Y( P; X8 W$ c" Q8 b
' ~$ j* |3 R# V1 N
// This is a simple schedule, with only one action that is. V5 V8 }) h. j4 \; W
// just repeated every time. See jmousetrap for more
) n4 }) J- k5 R& B6 _ // complicated schedules.
! A3 y( F7 {) c% _: ? p/ p
& J) t% N9 H' d% o modelSchedule = new ScheduleImpl (getZone (), 1);$ t+ `9 B4 A# @. ^. G+ @
modelSchedule.at$createAction (0, modelActions);
, ~* u c8 R8 _0 F! H* ], X8 O
* y; c- C: g1 r% y1 Z T return this;/ }/ O( T8 W& r) P. m$ i5 H
} |