HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
/ e1 s3 k, p9 U! G% |+ \( m: V! H$ o4 E- y
public Object buildActions () { [" Y" C9 v, R$ M
super.buildActions();
" ~. \( J3 j) k+ B, q2 [8 K. |
# }* J9 M9 B0 l8 s4 Q; i; l$ Z // Create the list of simulation actions. We put these in
+ N( k& k% N( }) l4 h' } // an action group, because we want these actions to be' o$ c- G6 H5 |& b/ N w
// executed in a specific order, but these steps should1 D. B0 a& v$ Y/ C5 C# t
// take no (simulated) time. The M(foo) means "The message, b( R$ L ]0 h; E) k
// called <foo>". You can send a message To a particular: J( M' s1 D% |7 A, }
// object, or ForEach object in a collection.8 J: r8 Y P/ ]3 K3 b
, e' _! A7 h& w6 x. _5 z
// Note we update the heatspace in two phases: first run
1 Q7 n/ S9 h8 U o7 ^+ E // diffusion, then run "updateWorld" to actually enact the
0 g8 Z2 x! i F9 P- _% y4 a1 P // changes the heatbugs have made. The ordering here is
9 A9 M# B! B7 f: c // significant!
3 R$ t. H" h% S/ ^; f- f' n: |
) {, }) K2 K1 ^3 [; w9 U# R // Note also, that with the additional/ R( [: S% y" x4 V: i' Z
// `randomizeHeatbugUpdateOrder' Boolean flag we can( s: A0 B7 G" r
// randomize the order in which the bugs actually run, q# C# o4 r$ D' v9 A4 Y
// their step rule. This has the effect of removing any, @' k5 n3 n- |* D7 h, ]
// systematic bias in the iteration throught the heatbug
! x4 g5 o9 H8 u1 R // list from timestep to timestep0 L5 z3 t; b- h, @9 y x
6 R1 t2 I7 p4 N/ q' p // By default, all `createActionForEach' modelActions have; J/ f+ v' i; N" e* e
// a default order of `Sequential', which means that the
% U% k: r# {; c1 n) N# E5 I4 v // order of iteration through the `heatbugList' will be8 }. C* V7 C( v& l
// identical (assuming the list order is not changed) I+ c# l* [& A0 I( C( u
// indirectly by some other process).
! T6 m% ~# p X1 X% L9 h% h' \
7 r) n+ M: Q# b8 Z' X* Z+ @# N modelActions = new ActionGroupImpl (getZone ());1 D% X; g- y b3 U/ u/ g |
4 R8 I' K+ L& ~1 i2 ^& T9 \ try {
8 [$ |% c9 H& g5 K" ?: w2 Z3 Y( A modelActions.createActionTo$message
2 z* o5 M5 J" o/ V6 c) ~0 O (heat, new Selector (heat.getClass (), "stepRule", false));
( z9 f& {$ V+ E% ?" R7 f/ j } catch (Exception e) {
) L# E# g# I6 p- J System.err.println ("Exception stepRule: " + e.getMessage ());
) g2 I' R: K- l; E, u }: J' W% Y! }3 P5 m8 ~' w4 Y$ l
4 V& U3 S7 b, J/ W7 k4 ^8 Y
try {( s2 e/ [. C4 H; j! m
Heatbug proto = (Heatbug) heatbugList.get (0);* S! L% C- _ w) |2 y
Selector sel = ; D9 y) Z3 Q6 {% e5 ~' L- F. w$ q
new Selector (proto.getClass (), "heatbugStep", false);
$ A$ ^- Q; K/ b+ d8 [) f actionForEach =
8 [2 h# K( N4 R% X8 x. w# X modelActions.createFActionForEachHomogeneous$call1 v0 d+ |. S; V& H6 p
(heatbugList,
/ B* U5 g& T' p9 P/ b j, t) } new FCallImpl (this, proto, sel,! s, U: I* [0 Q) G+ G+ r
new FArgumentsImpl (this, sel)));
( h0 E# ?* [, U- P+ M7 l } catch (Exception e) {+ z7 E% p- M* F9 V6 L
e.printStackTrace (System.err);' q8 {* k$ Y' w& w
}5 O6 E ?8 [, j; E7 y* R
! [4 k* u- O) C3 x syncUpdateOrder ();! e @$ k# o4 m$ H, S* M0 `
k0 M" F k" ]; \! x
try {
8 H3 K. z& H. @; |' W modelActions.createActionTo$message . A( P" `5 n7 l3 T& h$ Q
(heat, new Selector (heat.getClass (), "updateLattice", false));5 U3 g; Q3 G, s) @" l5 t4 F
} catch (Exception e) {
- [7 }: Z. ~" x q, S System.err.println("Exception updateLattice: " + e.getMessage ());
Y# k, a G8 b% X& ] }
4 ~* |. G |1 Z5 T7 x1 X
- k; d1 \+ Y; q // Then we create a schedule that executes the+ b: s. G; H; L. W7 Y; M' H
// modelActions. modelActions is an ActionGroup, by itself it( K4 y4 C" C: q/ X/ e" n
// has no notion of time. In order to have it executed in, R$ D6 {3 W. q- r% [ ^ ~
// time, we create a Schedule that says to use the
2 M' F- ^% O2 N! n // modelActions ActionGroup at particular times. This% H7 \: | T/ x' T! O0 L4 U: D, W
// schedule has a repeat interval of 1, it will loop every
' m# X- i. O6 M/ r, ^. l2 u // time step. The action is executed at time 0 relative to
( u) s s- s7 s1 [5 | ~9 I: s // the beginning of the loop.
1 x4 ^8 p+ G' ?+ A! N& [# d, {
. T9 r7 |9 Z" a4 d0 V, g // This is a simple schedule, with only one action that is9 F$ D4 j/ T6 L* X, k
// just repeated every time. See jmousetrap for more
' [$ x# B- b, H! K; K // complicated schedules.
7 h+ Q! `" j7 M$ u# q # `3 f; r7 M2 M/ ?# w5 T
modelSchedule = new ScheduleImpl (getZone (), 1);
6 L2 X* V+ E( t0 w; w2 B4 w, @$ \ modelSchedule.at$createAction (0, modelActions);
: P% v7 f6 l. z/ N9 j1 v* r( a / [( y' r4 _1 T% n3 Y
return this;
+ r, i% p8 o3 h4 G, L7 x ]* @ } |