HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:( f9 L' B9 v7 C V
) u7 M7 m0 _3 P0 i8 q6 x
public Object buildActions () {
; U- \ v9 H$ m; t: S* s" w super.buildActions();
+ j+ |/ q; h9 V + y z0 F& a+ X. S) P
// Create the list of simulation actions. We put these in
0 w$ [- Z0 J4 q- U$ E // an action group, because we want these actions to be l4 h/ _4 W) w0 n6 E
// executed in a specific order, but these steps should
' W1 f/ r* K+ x // take no (simulated) time. The M(foo) means "The message
' d i5 ~( `) u) o5 F$ H // called <foo>". You can send a message To a particular
/ S% h3 }3 _ _$ o% ]' q/ V // object, or ForEach object in a collection.
' |- Z) w. Y1 ?! ~
6 V- x7 M3 m( ^: k // Note we update the heatspace in two phases: first run
4 [0 L- l3 P! Y. U8 z% N // diffusion, then run "updateWorld" to actually enact the* u% o1 S% b/ g. A$ w B7 b
// changes the heatbugs have made. The ordering here is
* k2 E4 B5 B, } // significant!
, ^5 H; |9 N; f# B0 p. [6 H- g9 v* N
* J/ v& p/ e4 Q0 Z // Note also, that with the additional
0 R- e. c; R) b0 j# d9 W // `randomizeHeatbugUpdateOrder' Boolean flag we can
' X9 y: g. B Q+ ~0 z // randomize the order in which the bugs actually run
- U! d* H7 p9 s$ z // their step rule. This has the effect of removing any4 L7 h2 k% d5 T$ m
// systematic bias in the iteration throught the heatbug
# | y/ M: c5 } // list from timestep to timestep
8 r7 D9 k9 T) `8 d3 a+ A 1 K- E6 l- p7 L' F( j2 f0 n
// By default, all `createActionForEach' modelActions have
. {. K h: l3 h& N // a default order of `Sequential', which means that the
: | e' x" ^4 k# m7 i& ]/ p // order of iteration through the `heatbugList' will be
8 N) ]. s1 H3 } // identical (assuming the list order is not changed( k; S" H9 R" O7 L1 j& F2 R
// indirectly by some other process).
# M2 p1 t) @; V 6 {' T$ k" s& M! q
modelActions = new ActionGroupImpl (getZone ());
6 w7 K1 x$ o1 s: [2 C, K
/ L# n/ ]- g6 {3 Z try {
' n3 {6 D0 y# s( ~& Z, D2 P/ ^$ z modelActions.createActionTo$message
% M9 P3 l0 H2 Y! Y: s' _ (heat, new Selector (heat.getClass (), "stepRule", false));
" v5 u* q1 s# F3 I5 f } catch (Exception e) {
& B0 P; I+ k; u+ Q System.err.println ("Exception stepRule: " + e.getMessage ());3 l% G! r2 v) G8 U" r- Q
}
3 |2 ^. S9 e- A8 S+ E
H: W1 a9 T7 d2 ?+ r$ W try {
/ I$ b6 ^+ R$ o; q$ B4 m3 N @ Heatbug proto = (Heatbug) heatbugList.get (0);3 |3 F# h* H$ G
Selector sel =
& a/ \" k; D/ h# f) {# I new Selector (proto.getClass (), "heatbugStep", false);5 \4 J; B6 E$ _9 u
actionForEach =
2 G% s, x6 _9 y6 V/ [0 W0 ? modelActions.createFActionForEachHomogeneous$call
+ @0 _- J3 |. { (heatbugList,) \, E$ x8 o! _( D
new FCallImpl (this, proto, sel,
- a/ ]5 B) G% _6 B$ s new FArgumentsImpl (this, sel)));
) q7 J2 B$ g+ p& u! Y h& s: N9 T) f } catch (Exception e) {
9 B5 `5 @4 J4 z; U6 G- Y7 A6 W e.printStackTrace (System.err);
9 n" [2 ~0 y! D7 H6 L5 a0 ? }3 y- T: p) l' M3 {! R
8 J/ \$ ^9 N0 p/ c9 B
syncUpdateOrder ();
( X) a3 e$ a. q; Q( q3 y) X
, h5 n! M7 ~/ U; I' V+ ^ try {4 @& d6 Y! g8 I/ ?+ U
modelActions.createActionTo$message
# a2 r- W; T2 j2 y0 P, c- U; p. U (heat, new Selector (heat.getClass (), "updateLattice", false));) L; `+ N7 q3 _3 [) q7 p6 J
} catch (Exception e) {+ i9 R; j' R: {1 G4 L D
System.err.println("Exception updateLattice: " + e.getMessage ());$ `9 T8 w% r! i
}, M# _3 a* l) W2 j
8 X- e% s4 [! f- S2 D6 n+ w
// Then we create a schedule that executes the
% T2 q: d3 n. z7 z# J // modelActions. modelActions is an ActionGroup, by itself it
( M1 s. j) h7 ~% _& ?! V& J" [$ F1 U1 V // has no notion of time. In order to have it executed in
+ u `5 R* `, R8 S% A // time, we create a Schedule that says to use the
& G/ O7 N1 X, B' I) V% \; N // modelActions ActionGroup at particular times. This: [) h2 U1 g1 g/ E+ j0 s
// schedule has a repeat interval of 1, it will loop every
2 Z+ _4 u/ g: N4 ^3 j; i7 b // time step. The action is executed at time 0 relative to8 P# X) S; }: \0 R# D
// the beginning of the loop.! g$ O% ?, y$ _- _& a
* e$ {" L2 C/ m
// This is a simple schedule, with only one action that is( ^8 r2 ?* r- {
// just repeated every time. See jmousetrap for more
8 p1 V* T- w4 r8 [! D0 e& e // complicated schedules.
2 D0 D4 G6 R% o& J$ B& J ( d7 ^5 q! U6 {: e0 l
modelSchedule = new ScheduleImpl (getZone (), 1);
# P; K* y: V* m, O S ^1 e modelSchedule.at$createAction (0, modelActions);$ N# l$ J0 ]3 m8 k) Y7 R
; M2 ]$ l3 l" O& o9 ^2 N
return this;5 N6 A9 V/ _! ]8 [8 O' w' ^
} |