HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
' _9 K$ J$ P0 Y4 |* o) E, X8 K/ q
public Object buildActions () {& t# W) B% P2 r) t9 C4 R
super.buildActions();
- z! y, v8 n: S
4 c8 L7 t. {( n0 c) s // Create the list of simulation actions. We put these in" G) P# K* i5 [# I
// an action group, because we want these actions to be! k+ e4 W7 u( X6 T& p: y
// executed in a specific order, but these steps should
6 t r2 a9 d7 E( m // take no (simulated) time. The M(foo) means "The message# G* T+ E3 j7 t1 r
// called <foo>". You can send a message To a particular
) e+ R- k: ^$ l4 } W // object, or ForEach object in a collection.4 j" H: B- n( P! a9 {$ t' ?5 }. |
' \( K( }+ C; H4 ^+ ]& H
// Note we update the heatspace in two phases: first run
0 D2 r, r5 g ?+ E' [2 c* B // diffusion, then run "updateWorld" to actually enact the
' K% z w2 O$ s4 E' j) u, a4 A // changes the heatbugs have made. The ordering here is
: F6 f7 l+ O& I2 y' P // significant!& y+ V) b2 N/ L
% t" e7 E( E6 m, N3 v // Note also, that with the additional
2 H7 V! m, o/ R2 Y // `randomizeHeatbugUpdateOrder' Boolean flag we can
" c4 g$ Y ~% `) J7 r# m" ?* D // randomize the order in which the bugs actually run- m" }' ?" K6 {/ C+ i+ S
// their step rule. This has the effect of removing any3 g4 d* X5 ^/ E) l2 T* j) w& k
// systematic bias in the iteration throught the heatbug/ i' c7 x" ~6 }: b7 x$ B
// list from timestep to timestep# L0 q. K" `4 L! b" ^, w
" }/ M3 ~: h( X( ]
// By default, all `createActionForEach' modelActions have
9 Q y8 o. \0 X // a default order of `Sequential', which means that the4 L$ f; E" u4 X6 g* h
// order of iteration through the `heatbugList' will be9 z3 ]: L8 f4 l4 M( t ], t( I+ `6 ]
// identical (assuming the list order is not changed9 I( s, w/ n* ?# F- w' B
// indirectly by some other process).5 i- ]0 r- w- C7 j$ ]6 I0 p: D' m* J
) Z. F+ c1 d3 D0 G" m, u modelActions = new ActionGroupImpl (getZone ());
* R8 v, b" @5 v5 ]( c; T) r; m5 S; k7 |- x
try {
7 p2 x5 K* Z; M, M3 A% d3 s modelActions.createActionTo$message b* D' S. d8 D8 Q
(heat, new Selector (heat.getClass (), "stepRule", false));
1 R* [0 h2 {) N$ i0 V2 b$ F$ Y/ o } catch (Exception e) {
, j+ N4 ~; b1 C* a$ e( Z0 W System.err.println ("Exception stepRule: " + e.getMessage ());3 n; i q& C! p; C7 b
}
2 I) g7 _2 j. o# k( j! E# ^- i7 N' S) C' H. a7 w
try {$ [! B' |; s6 R* l
Heatbug proto = (Heatbug) heatbugList.get (0);9 a( ~% w a% ?' E9 A Y) u {
Selector sel =
4 e/ W3 j$ G, \+ b3 ^ new Selector (proto.getClass (), "heatbugStep", false);1 i; D' m6 m* Y8 O
actionForEach =
1 |+ y) u2 u! P" c& k modelActions.createFActionForEachHomogeneous$call6 t; h; K2 T' [
(heatbugList,
# j/ Q/ b5 }/ J( L new FCallImpl (this, proto, sel,4 y4 M; _2 y+ U6 p8 Z
new FArgumentsImpl (this, sel))); l" i6 h, `4 f' O
} catch (Exception e) {/ F0 R: p- q, F- u
e.printStackTrace (System.err);7 {/ S' v& G: D& E/ A+ @
}/ h& t! m: a; U$ [/ o
- A) O7 `: V0 ]. p! v5 y syncUpdateOrder ();
* Z9 n- G2 j+ E' X9 U: R' g2 x: ?8 x L! y# H2 V
try {
7 F- f5 D8 E( r" c& q modelActions.createActionTo$message 7 x7 U' U: ?: s" b! i
(heat, new Selector (heat.getClass (), "updateLattice", false)); Y$ f4 v& ]4 @* s* h
} catch (Exception e) {$ j0 k' g4 m7 v, J# n1 i
System.err.println("Exception updateLattice: " + e.getMessage ());
" n# W7 E! k# w; G }: k2 ]4 j% V* b6 Q, i4 f+ _
; S0 b7 H+ |$ {, @3 n3 L) r
// Then we create a schedule that executes the
* z9 V; p% `" p7 F0 A // modelActions. modelActions is an ActionGroup, by itself it! t! p. m1 B( m% |$ G* ~& C
// has no notion of time. In order to have it executed in0 b0 v( u' @/ P1 Q( c
// time, we create a Schedule that says to use the
+ u) H) J3 m) Z- U7 @ // modelActions ActionGroup at particular times. This* t! }0 b8 U' l# v, {: L8 Q
// schedule has a repeat interval of 1, it will loop every
, h0 `. F. Z" @$ f4 W* L1 V q // time step. The action is executed at time 0 relative to
" A ` h0 u; z! T4 v1 [7 u // the beginning of the loop.
& K$ s9 |8 G0 T' ^; c" @% o W8 @5 z
( H( p3 p7 H! G) K' I8 n // This is a simple schedule, with only one action that is3 m8 \3 H8 c) x( X# _) ]
// just repeated every time. See jmousetrap for more
8 K8 b+ A; A9 } // complicated schedules.
7 }- N/ { d$ N5 i) ^ ?
" ~- }3 h3 {8 H! z" o modelSchedule = new ScheduleImpl (getZone (), 1);
& S% G$ w' M. B9 L' b8 M' F* K modelSchedule.at$createAction (0, modelActions);; s5 F+ \% s) h. O' T! \# C2 e
! E, q1 w" s7 ^) Z& B# Q `
return this;
% s% m4 U2 @; H [" {6 L } |