HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
3 d$ t) K+ Z( L5 _* n
& `$ D' O0 n3 a0 ~/ }+ g. i7 X public Object buildActions () {
* @- k. r) @: {$ @! Y super.buildActions();8 ?, E6 l$ T2 T8 @1 F4 f& G1 I8 T
/ L. j( d; h% u7 p
// Create the list of simulation actions. We put these in
0 h. }& K# I& B% v ~ // an action group, because we want these actions to be
9 s' Z {6 O( Q // executed in a specific order, but these steps should
, s+ e+ }2 x3 h( Q7 z) a% m/ L // take no (simulated) time. The M(foo) means "The message' b0 m* @) @% D" \ J
// called <foo>". You can send a message To a particular2 R; l4 j' N: D0 } Y
// object, or ForEach object in a collection.
7 D% N5 ]1 Z7 M# C+ u# W3 U3 p5 u1 d 1 H3 v, F" N9 _7 I
// Note we update the heatspace in two phases: first run" Y$ B1 p T, j8 ~8 Y& |& t) V
// diffusion, then run "updateWorld" to actually enact the$ P5 C2 `+ q' k7 G
// changes the heatbugs have made. The ordering here is- }% w0 Y; X- W8 `& X
// significant!. R1 T* \& Q# T3 }
% j9 [ C9 ~% j; q0 M* V% \ R( f8 k" f // Note also, that with the additional
3 D. m" M: ^& G& h& } // `randomizeHeatbugUpdateOrder' Boolean flag we can
' _+ D1 u. t. u7 Z% X: u // randomize the order in which the bugs actually run1 j' m2 Y, Y2 u
// their step rule. This has the effect of removing any! {5 Z; t" r0 v5 s4 s
// systematic bias in the iteration throught the heatbug9 b& Z# w* P. t7 A3 I# U$ V
// list from timestep to timestep8 p: N2 h0 a7 {% V
9 h' D! _- z& P8 J // By default, all `createActionForEach' modelActions have
' y5 `( ]& r' A1 Z y2 h9 {% G // a default order of `Sequential', which means that the
& k- L9 X9 s+ Y9 ^ // order of iteration through the `heatbugList' will be( ^. S% N9 H+ V' F
// identical (assuming the list order is not changed9 p# `3 Q* r* k% W$ _. r) X/ r
// indirectly by some other process).
" K: E- Q, g: \; @3 g3 k' E
8 B3 B6 R. X% A$ ~) r modelActions = new ActionGroupImpl (getZone ());
, w. Y/ c- l) k) a( Z
4 u% x. g @2 w try {. T3 A6 O) q# _. D" x$ c
modelActions.createActionTo$message6 y; T# o5 g% @" w
(heat, new Selector (heat.getClass (), "stepRule", false));9 V, [/ W3 N' W5 G
} catch (Exception e) {
# z5 ^: }* b, K/ A% L* B% m G) K System.err.println ("Exception stepRule: " + e.getMessage ());0 v1 h5 @% I2 G+ H+ w3 T2 W6 V
}' U' M! V7 |/ [/ {7 ]
+ ~% l% R a3 h+ [: ` g9 j2 b0 B
try {$ F& h d# J; E0 }; [8 }7 z
Heatbug proto = (Heatbug) heatbugList.get (0);0 r( a6 H4 O7 Y6 h8 F+ P7 Y
Selector sel =
0 w2 \! W) `$ e new Selector (proto.getClass (), "heatbugStep", false);; p+ h0 n' t0 Y6 M
actionForEach =" p1 I$ s$ I V/ K; [
modelActions.createFActionForEachHomogeneous$call7 N* l8 J Y, _3 K( M
(heatbugList,' G U% {2 o4 E; z0 d! {! |1 t
new FCallImpl (this, proto, sel,
4 O) n* G" _* [( P+ c new FArgumentsImpl (this, sel)));6 f, M' K" O; `3 O
} catch (Exception e) {5 v& C5 Z, q1 _
e.printStackTrace (System.err);
7 N: v8 I0 b# e! H }
: r/ {, [) U$ u
" }3 x; @9 D9 j& E2 c1 S% O syncUpdateOrder ();
" l. N$ I9 G7 l1 l' |% a7 C: u, K& G* y9 { N1 `
try {
( i7 @4 }, o f6 U9 |7 {; b5 d" n modelActions.createActionTo$message
! U4 U# E# p& c( m* k (heat, new Selector (heat.getClass (), "updateLattice", false));
9 w4 f( w1 Q" Q4 f' D! U } catch (Exception e) {- J* c4 V9 t8 R; ]" q
System.err.println("Exception updateLattice: " + e.getMessage ());( u' R z/ F; S" t z
}( t8 Z3 v" y9 |+ l. s7 l6 P
' o' ~; s$ S% p1 ^. _ // Then we create a schedule that executes the2 W/ B' o- ]0 Y, M! o1 z) b
// modelActions. modelActions is an ActionGroup, by itself it
' C v6 y: d* s9 |5 S0 e6 G // has no notion of time. In order to have it executed in
9 v0 {; s3 U/ | // time, we create a Schedule that says to use the) n3 B1 K5 u% ?6 e$ o
// modelActions ActionGroup at particular times. This6 a8 I* s& q' _* T
// schedule has a repeat interval of 1, it will loop every
! D3 j" F- Q. W7 Q0 e2 a! |) l // time step. The action is executed at time 0 relative to
& q, K, r+ W( Z // the beginning of the loop., i- j5 \! q5 G* t) H% u2 F0 O
) @; A5 ^# D( i) d& ?3 `
// This is a simple schedule, with only one action that is
3 M# a% { j/ y4 _# \' s // just repeated every time. See jmousetrap for more+ R4 Z1 m# w3 g1 i" I% u1 R
// complicated schedules.9 d8 L1 j! R4 S. a" ]8 V
$ E) ~! |" Z8 f, h; S modelSchedule = new ScheduleImpl (getZone (), 1);9 E- x# v' @ W
modelSchedule.at$createAction (0, modelActions);4 z9 d0 w& r7 l* i1 a9 j8 i3 U1 t2 L
6 N& Q+ k7 ]2 v% I6 i/ m ~+ }- ~5 k
return this;
8 U6 F# |4 y6 z } |