HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:7 |. _$ M2 Q1 g( v( c! g
3 ~2 d0 C; z ~ public Object buildActions () {2 x3 W+ P8 w/ R9 [ o3 }
super.buildActions();$ t# P! d9 f1 `5 m$ l; T2 ~
1 S6 @* b7 f9 h' ^" M, v
// Create the list of simulation actions. We put these in
, K4 t3 E; a$ d5 n% ?2 j // an action group, because we want these actions to be
! _! N8 D, P) M! U, Y% |! s/ `' W // executed in a specific order, but these steps should0 }& H. R% V2 j* l! C; o
// take no (simulated) time. The M(foo) means "The message. \; o, t9 I! o/ @; l. z1 I
// called <foo>". You can send a message To a particular% M' R/ w2 c2 K W* O% D2 n0 y) Z4 \& {. K
// object, or ForEach object in a collection.
$ A1 x9 d4 v' v
" Y( D, k7 \, @2 i- A0 R // Note we update the heatspace in two phases: first run
0 t( r/ @. H2 E+ H& m M4 g& x ` // diffusion, then run "updateWorld" to actually enact the
% K3 X# N& c$ v j' f3 Z0 H9 k // changes the heatbugs have made. The ordering here is1 g t) H6 @) o6 H2 g( x0 z3 }
// significant!
7 Q" k; R& R. g4 o; n* Y
7 P7 k0 _+ s0 ]- L9 F3 _2 b // Note also, that with the additional ^# N |2 } [
// `randomizeHeatbugUpdateOrder' Boolean flag we can
, }& T! ^$ ?. ~. W3 [( X // randomize the order in which the bugs actually run5 K9 g5 m( R5 g. o9 L
// their step rule. This has the effect of removing any! z, z/ M9 Y, |& }
// systematic bias in the iteration throught the heatbug
! i& g! R @5 o* S/ y! h // list from timestep to timestep
/ p! f6 i* U4 g p* o0 n& q5 c
- l) ~# q" p- J9 \0 c' p+ g8 e // By default, all `createActionForEach' modelActions have8 F; G- _- f% b# |- H* n
// a default order of `Sequential', which means that the& b7 g2 h1 l! A! q1 n
// order of iteration through the `heatbugList' will be
7 B ?6 x7 f& q5 [# U& M4 ?3 t // identical (assuming the list order is not changed
" P' S( T4 E& ^! `/ V // indirectly by some other process).
. A) l8 ]" x- `9 c0 v: m
4 B$ D F0 C; a8 d# v modelActions = new ActionGroupImpl (getZone ());
1 n" A0 L1 \0 L9 J; A k
5 w% Y# {- ?7 ]( I" ^* D; |0 a try {& h. U$ Z1 Q7 m C3 D4 h( }
modelActions.createActionTo$message
N5 D- _& I' z7 p$ [: M" q6 C# _ (heat, new Selector (heat.getClass (), "stepRule", false));
4 j% E8 M$ X1 I" B } catch (Exception e) { H5 u/ R4 _9 D- F0 i3 z4 i, R4 E
System.err.println ("Exception stepRule: " + e.getMessage ());1 R9 ]# l$ w; E. ~
}3 W, O8 a2 T1 \
2 C( ^. w5 M- C. o2 A
try {
: b4 V$ \2 Q6 e Heatbug proto = (Heatbug) heatbugList.get (0);# L: d$ T& G4 Z
Selector sel =
1 r% b7 ^! ?* M" C2 K% _ new Selector (proto.getClass (), "heatbugStep", false);& q2 [9 C6 R" n. \7 U
actionForEach =
* z* ^ t4 R8 ]( L8 R2 o4 D modelActions.createFActionForEachHomogeneous$call. L ]7 j" k1 n
(heatbugList,
# R/ A+ |5 H8 M% ~& E: F+ u new FCallImpl (this, proto, sel,
% |* s" {2 h* d' w4 J new FArgumentsImpl (this, sel)));& {7 z K: F: x: F5 z
} catch (Exception e) {
0 h4 H( b- Z3 U( e9 @ e.printStackTrace (System.err);
$ c, s* B5 `3 c6 N f1 Z$ b }& N* d7 }: { ~
R9 X5 r1 b, w5 k- A- E3 j
syncUpdateOrder ();
6 ?8 F# M+ n" K- J, [& _" u' _/ s8 S V, G4 | Q
try {; C C* X& j- J) u T2 M$ F
modelActions.createActionTo$message
- }4 S/ z4 ~% g1 X0 p) M9 @ (heat, new Selector (heat.getClass (), "updateLattice", false));) q- F* I" N+ C
} catch (Exception e) {) J5 U( N! `+ v- c# q
System.err.println("Exception updateLattice: " + e.getMessage ());+ G- I4 y9 C& ^6 N5 o& Y
}
$ g4 A1 ]* u: H4 u6 t0 Z/ B5 X - f' T$ J* K i% H( T
// Then we create a schedule that executes the
# S% ]* g8 b5 t. k // modelActions. modelActions is an ActionGroup, by itself it7 t6 `# F5 i& R1 d! r7 j% D! V% f! b4 F
// has no notion of time. In order to have it executed in
% O! l+ q: H' y3 a3 O0 N // time, we create a Schedule that says to use the
. \/ U- B/ F, `) { // modelActions ActionGroup at particular times. This
9 A8 u' t0 N& y2 `" e0 _9 e# F+ C // schedule has a repeat interval of 1, it will loop every% i n6 h. a" F& ^
// time step. The action is executed at time 0 relative to& K, r: R# z$ v$ E3 r" k N
// the beginning of the loop.
9 P# \9 K4 i: T5 y" E
. B# ]& A( o1 |0 k' i // This is a simple schedule, with only one action that is
8 y' \7 S" V# u // just repeated every time. See jmousetrap for more
+ l% g9 j+ Q Y" d1 ` // complicated schedules.
# p' B @) z; V1 }; }. ` ( Q3 p" X6 ~7 P9 {% O3 m
modelSchedule = new ScheduleImpl (getZone (), 1);
! F% z2 `3 ?0 {: i2 j modelSchedule.at$createAction (0, modelActions);# b, \* `9 z( l6 I7 T
' }3 V; y B* U) B5 A( D
return this;
% w7 T, h$ Q) ]/ G6 e } |