HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:" @9 |& d% o; ~/ E
( O/ e! D, ^! M public Object buildActions () {4 M; ?. v) q! k q6 f0 x
super.buildActions();
3 P1 g5 a! X H
% S( M) T* P9 D: @3 c+ t, `3 n // Create the list of simulation actions. We put these in7 c* w6 t1 q' U* I6 G
// an action group, because we want these actions to be
0 G t/ N- v7 {7 W5 F7 h // executed in a specific order, but these steps should
2 J, d" W3 [( e- t4 j5 a // take no (simulated) time. The M(foo) means "The message9 _( c7 E; J- a, @3 W6 }. _6 d% h
// called <foo>". You can send a message To a particular: w/ I9 s4 Q7 J% G d+ h
// object, or ForEach object in a collection.* L, l2 c8 n ?5 \8 v
5 ~* y: t3 E2 i0 p // Note we update the heatspace in two phases: first run" T# w% r: l) ?
// diffusion, then run "updateWorld" to actually enact the$ t- o% Y- t3 [. \: ` ? _
// changes the heatbugs have made. The ordering here is
! Q9 ?, |0 q1 r4 W. O, J5 l, R // significant! ^7 X8 I6 Z8 @8 b6 P
$ g# N7 b4 t" A9 e8 @+ D% ? // Note also, that with the additional2 h; m. M7 c, ^: N3 v
// `randomizeHeatbugUpdateOrder' Boolean flag we can
4 M7 |- Y( m3 p( B* P; n // randomize the order in which the bugs actually run
8 j5 e+ R) Q/ g, Y$ \2 }5 n( r" S // their step rule. This has the effect of removing any' Y6 z7 w* {0 O: X8 m! x/ I2 O$ g
// systematic bias in the iteration throught the heatbug
* ]" K) \! R: y5 j& S1 ? // list from timestep to timestep% I. U* R5 t3 B, l6 j
, v! q1 b0 o, G- o$ B8 k0 O: @2 R4 Y
// By default, all `createActionForEach' modelActions have
( w, U2 Z" K+ G // a default order of `Sequential', which means that the
. [, t( C% @9 \- e# L# g. j& L% b // order of iteration through the `heatbugList' will be/ D a" `% Q8 [& @
// identical (assuming the list order is not changed
4 \2 z7 { t# n3 N: J* C/ J8 I* W // indirectly by some other process).5 e; ^1 r: ?2 z
+ F. R9 K0 ^# h
modelActions = new ActionGroupImpl (getZone ());
& s }5 ^- Z4 b) F
7 n n/ Y, i' b try {
5 M- u- i+ B9 G( A8 f modelActions.createActionTo$message) h7 a! M* _2 I- D" L
(heat, new Selector (heat.getClass (), "stepRule", false));
) Z2 r4 I' R- U2 t0 h8 K; z$ I } catch (Exception e) {
; U7 x1 `8 h7 v! F9 F" _: F8 M System.err.println ("Exception stepRule: " + e.getMessage ());
' S9 A/ o. v0 @: c* ` }( W7 A4 @, H# L) f8 j6 A% }! U# y
, j3 K& w% A* ], Y# F; ~. _$ h3 D
try {
' k* b/ u. {! f$ j Heatbug proto = (Heatbug) heatbugList.get (0);
7 t+ N6 t/ R. }, F' h Selector sel =
# @& O) |/ g# Q& h% O* a4 W) f9 J new Selector (proto.getClass (), "heatbugStep", false);
# _+ C, S1 y$ J: |! G. h+ l7 t actionForEach =% U% _3 b1 @7 G( r
modelActions.createFActionForEachHomogeneous$call
$ a( k1 s/ t$ O; p% `% I/ a (heatbugList,
4 k' d8 X6 t+ K: D6 e new FCallImpl (this, proto, sel,3 V0 Q8 P1 ^0 R/ x5 {) ^) A. B
new FArgumentsImpl (this, sel)));
9 f* [( `9 o( h7 b3 C- \ } catch (Exception e) {' E* _" E! l( P
e.printStackTrace (System.err);2 R g2 T- b& m" E' q! n0 d9 i
}
% I, Q# u' [1 [, h
1 r c( l! H# i& Y6 o' T/ T# ~ syncUpdateOrder ();4 l- {, v. `1 p7 i6 p& ?- ]
3 k! R: A; q$ { try {5 ]" q' x- R* ~/ i
modelActions.createActionTo$message
1 r( n$ ?9 x- I& h: s7 z4 ` (heat, new Selector (heat.getClass (), "updateLattice", false));1 {3 B' x* B) c7 l S' S8 r9 |' y
} catch (Exception e) {% I1 P7 [6 h7 {# N
System.err.println("Exception updateLattice: " + e.getMessage ());
, s& }; A9 M/ ] }
+ H8 X: H9 S" X3 k. \' ^ 3 T4 P3 Q8 s1 f+ w" E" d
// Then we create a schedule that executes the4 Z6 R6 E5 b) q' @5 h0 x% e
// modelActions. modelActions is an ActionGroup, by itself it
( w" _ B4 ?; D# K" R P0 R' g // has no notion of time. In order to have it executed in ^- B& D0 K( g) c: z3 c5 V/ u$ G
// time, we create a Schedule that says to use the/ ]# f4 g K4 ^0 k! |* X$ N. ~
// modelActions ActionGroup at particular times. This# Z3 I2 k+ H( L
// schedule has a repeat interval of 1, it will loop every- B. I1 W/ [5 a# |( I& H6 u
// time step. The action is executed at time 0 relative to* f; Z1 K- k _7 C: r: s
// the beginning of the loop.
3 ^, S5 U7 D. O& I7 b) D4 r8 P3 }; q. Z
// This is a simple schedule, with only one action that is
6 [" x. `8 s1 n- L P- _6 ^ // just repeated every time. See jmousetrap for more
: ^, t* m4 f6 y5 A$ n. p // complicated schedules.3 k* P6 w& w. Y- O% o
6 S) K. t5 P' | modelSchedule = new ScheduleImpl (getZone (), 1);
& N9 h1 q+ N; H3 W5 [2 |# t modelSchedule.at$createAction (0, modelActions);
* t! I9 w. Q! T9 k3 l 1 i/ U- Q5 D2 Y" j
return this;
6 y- R; U5 ~1 j# y' ]$ Q } |