HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
+ s+ E6 H8 }3 N, _. K( G9 h9 D" j( | \( H/ n5 P
public Object buildActions () {
* O: j& k! r! c! c( g4 E0 D2 O super.buildActions();- p% H0 p8 p) n) G: P2 m8 t) Z& L
5 k9 X" |; a( Z% o // Create the list of simulation actions. We put these in2 s/ q _8 z: B/ P0 |
// an action group, because we want these actions to be$ n: Y/ D5 O% d' \: x
// executed in a specific order, but these steps should' T6 V& D. G, ~- a
// take no (simulated) time. The M(foo) means "The message
+ v& ^: ~' P& |6 l7 l7 c // called <foo>". You can send a message To a particular
6 a. p1 w; R" F& p% s // object, or ForEach object in a collection.- S+ k! {: z% L5 N# q, ] W* z
* n B: b. q/ W0 b: V
// Note we update the heatspace in two phases: first run9 d. D% ?& D1 V; d1 f
// diffusion, then run "updateWorld" to actually enact the
% M: o* |# ]) n$ v+ T3 b // changes the heatbugs have made. The ordering here is
6 {/ r+ e' H# w3 P4 z // significant!6 \: h1 w2 Y& q( t+ T# Z
! i0 x9 R/ Y8 g7 X. M- f
// Note also, that with the additional
: t7 h, E$ ]/ [2 K: [. G // `randomizeHeatbugUpdateOrder' Boolean flag we can5 x# x- C4 A# C1 P
// randomize the order in which the bugs actually run
! L5 |+ E7 [3 x1 ?6 N& K. D // their step rule. This has the effect of removing any
8 J+ e; W& U- g // systematic bias in the iteration throught the heatbug+ E# \) l2 ~& A' I* c5 m
// list from timestep to timestep
& h \4 m, [ W/ O& S6 \. A
8 {8 d4 H7 k9 M) F+ ?* M2 A6 | // By default, all `createActionForEach' modelActions have- Q$ l9 c# ?- F& E5 ~
// a default order of `Sequential', which means that the4 Z* ?* @% d2 y6 r% d! j
// order of iteration through the `heatbugList' will be
1 K; a! N' P4 E( K# H" ?& h // identical (assuming the list order is not changed
6 }3 d4 D; |" L2 _( L // indirectly by some other process).( B# C! O0 ?' f0 a/ c
1 ?( b5 e0 f+ B( |8 Y modelActions = new ActionGroupImpl (getZone ());
. L4 A9 |, s0 o& {1 B) @3 |
' _( L% N0 H* ~# t9 I3 V; w! R+ S try {
7 X" i2 [' i- ?# B) F3 g/ a modelActions.createActionTo$message
1 w" i/ T' h/ X3 b6 p (heat, new Selector (heat.getClass (), "stepRule", false));: G+ f% J& M1 U8 [; E4 s8 f) h7 M
} catch (Exception e) {% b7 g: y0 v5 Q) O
System.err.println ("Exception stepRule: " + e.getMessage ());
8 B; I0 u) I/ X- ? }- q$ f h$ c, j F* c$ J/ X/ {5 F0 p
: [$ M# }- ~0 j+ t try {$ N7 G7 V2 Y% y4 X1 `4 C
Heatbug proto = (Heatbug) heatbugList.get (0);+ u; H$ b7 A6 B3 b& \! F3 E
Selector sel = ( Q, O2 S" m2 m) U1 U3 \
new Selector (proto.getClass (), "heatbugStep", false);: B" f# \# w- {% T d1 b* I; @' e" m v
actionForEach =: n% L2 H1 g4 R; I4 B
modelActions.createFActionForEachHomogeneous$call( |1 C, {* U% G' G" N
(heatbugList,
, H& `) ], v$ a5 R% k% [ new FCallImpl (this, proto, sel,
" L( y$ G7 n: F4 Q' W5 r new FArgumentsImpl (this, sel)));
+ u0 K! W* n2 F, [5 ]' j; \+ E } catch (Exception e) {$ G3 P* ]( J- f5 a2 r
e.printStackTrace (System.err);
* i9 e# V" J0 S% @! e2 W/ L }" k* J4 N; ?6 ~6 R3 B3 S$ E# x
) Y7 a5 j5 a% P' ]# _' R
syncUpdateOrder ();. W, [ Q3 o6 ]* o j) L9 }
/ E# t6 N, _4 X; s try {1 ?' C2 c. n$ A5 s/ U' a
modelActions.createActionTo$message
$ U- s9 K* j3 h j t" @/ I (heat, new Selector (heat.getClass (), "updateLattice", false));
: D% {4 T% S$ s8 g M7 z0 Q } catch (Exception e) {
3 y. K# Z5 @" |7 ^+ u. X' u, B System.err.println("Exception updateLattice: " + e.getMessage ());5 v8 v1 o" M% V; j
}
* T, Q* Q2 q# `% c! E& p- a. Z: ` ( A. ]1 y( z% b9 z
// Then we create a schedule that executes the# |: _1 I' U' g! ?
// modelActions. modelActions is an ActionGroup, by itself it
; X: _+ ~# E5 F // has no notion of time. In order to have it executed in9 t7 z1 Z! ^* g& r( z0 R
// time, we create a Schedule that says to use the
Z6 F8 Z' S7 f0 _9 `5 x // modelActions ActionGroup at particular times. This
" c9 D' j# l* A/ `& _2 P9 { // schedule has a repeat interval of 1, it will loop every
( h5 F5 k, s+ L! g0 d Y // time step. The action is executed at time 0 relative to
# \# g/ L. \0 [1 c2 h, c1 | // the beginning of the loop.
7 K- v# e- x/ R. C$ ~* y" \/ `& Y" F6 V. V3 d+ y6 `0 M
// This is a simple schedule, with only one action that is
: X6 Z* \0 n$ [% r2 t* S // just repeated every time. See jmousetrap for more
q3 c x! D; h% D+ x U& k( L // complicated schedules.# p/ \% ^5 |, h+ m( K
1 f U$ J& T5 c& J7 d
modelSchedule = new ScheduleImpl (getZone (), 1);
- s4 M$ L0 W' T: N% l, e/ k0 C8 \ modelSchedule.at$createAction (0, modelActions);
- ?2 I7 h- J: y2 }* v$ V& M
& B0 ^2 j4 a/ y) a return this;% [9 w9 m5 d d8 F5 j4 [5 Y
} |