HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:4 m; E" a! j5 R1 R$ v! |1 ]6 `; S9 D
5 l q( d3 ]" q/ ^9 P public Object buildActions () {0 Q6 e0 W/ G2 P6 D" d
super.buildActions();
* h" q+ B( z* y" K( p
6 c& @4 N5 w( Y% p // Create the list of simulation actions. We put these in% N. o+ S3 h+ H" b2 H
// an action group, because we want these actions to be
* U& b8 [5 b- J. [- [$ Y4 R // executed in a specific order, but these steps should$ w3 C! R' r) Y
// take no (simulated) time. The M(foo) means "The message; ?( v" h3 U5 _& s( Z
// called <foo>". You can send a message To a particular
& |/ @ o4 P+ K; s% b" n+ X. J9 {* w // object, or ForEach object in a collection./ X; ~$ Z% N2 ]! R& r6 O% m4 J" O# j
+ a$ n6 q* R# M* E5 f# J
// Note we update the heatspace in two phases: first run
0 I* @- A! S& Z // diffusion, then run "updateWorld" to actually enact the3 q7 Y& G6 r+ v/ u/ O2 M! _" a
// changes the heatbugs have made. The ordering here is
& Z$ @. b3 G6 U; y% n // significant!
# U+ Y7 m1 c5 d F 6 Z: m1 k6 i: v" q! m% J+ w
// Note also, that with the additional! C1 c6 M1 G4 |* k+ @. j( B9 t
// `randomizeHeatbugUpdateOrder' Boolean flag we can$ y. s' P2 d. `/ }% ~
// randomize the order in which the bugs actually run
6 c, P N8 ^: W4 q- s( A- _ // their step rule. This has the effect of removing any
. ]. o! W, f7 T2 {* h7 ?, X // systematic bias in the iteration throught the heatbug$ J' g9 V9 [$ \- w9 _1 j+ a
// list from timestep to timestep
# c4 r& ^$ \1 L8 L1 c ; W. i: p/ Z+ @$ t
// By default, all `createActionForEach' modelActions have+ G- O3 f/ T/ t" _, [0 j
// a default order of `Sequential', which means that the$ q/ @! e/ B$ f: _7 H |2 ?5 Y
// order of iteration through the `heatbugList' will be; X3 u) u! d) O, h
// identical (assuming the list order is not changed
! W; m/ t, ?' j* P% u' n // indirectly by some other process).9 F$ e0 [8 l2 i% W* y: G& n
" ?+ J: U5 B/ N0 }3 h5 _: w
modelActions = new ActionGroupImpl (getZone ());
$ D9 |/ a$ N5 D5 a3 ]! Q m @/ x
try {- o! X! |+ B/ O5 L+ m
modelActions.createActionTo$message( E0 y) @* |9 x* w3 N
(heat, new Selector (heat.getClass (), "stepRule", false));
' ?" V/ G$ u. l* T' ^7 _5 H } catch (Exception e) {2 n# n2 p% B* F; a1 m+ e
System.err.println ("Exception stepRule: " + e.getMessage ());
$ N% @3 {- _+ C" `* j. q! R }
' K8 L+ Y5 w1 P9 V Y
7 C, [+ i, n! G% a try {. c/ W- |9 U, W" `
Heatbug proto = (Heatbug) heatbugList.get (0);0 W* o# f) h2 B. I3 J# r
Selector sel = ! C }+ l6 ^3 G5 g2 j; T6 n$ l& K
new Selector (proto.getClass (), "heatbugStep", false);
5 D4 w Z" k% _ actionForEach =
3 W1 d- E2 I7 D& \( j4 x modelActions.createFActionForEachHomogeneous$call
0 X) h% }) R0 q! ^/ _ (heatbugList,: d! |- d& @' Q+ q
new FCallImpl (this, proto, sel,
- Q5 n& M( d6 ~, `9 P; i" G new FArgumentsImpl (this, sel)));
, W' C9 ~7 s2 _ } catch (Exception e) {! f+ `9 L# X k) t5 m
e.printStackTrace (System.err);. z- Q: v' y; Q2 _# L3 t# U8 C
}
i: S% h& o+ ]% |
" V; m9 Y0 H5 {+ Y; u syncUpdateOrder ();
5 B! Y$ u' i% M2 L5 |) }9 P, J6 {9 V2 g6 M
try {
4 j: X% f8 @2 y" q! A: C7 L1 S modelActions.createActionTo$message & E' W2 N( a; m$ c$ v$ w
(heat, new Selector (heat.getClass (), "updateLattice", false));. G% L" u/ k1 M" U
} catch (Exception e) {
$ L2 t/ {2 y4 V; p System.err.println("Exception updateLattice: " + e.getMessage ());
) P8 `+ H2 g6 Z( K) J }
( a! H# O3 T2 D 9 _9 C l/ Q6 w8 E; X1 o, F: V
// Then we create a schedule that executes the1 D0 p& U' v% J# B) q8 ?. U
// modelActions. modelActions is an ActionGroup, by itself it
" y9 u/ D6 z I. v& u5 w) a // has no notion of time. In order to have it executed in5 b/ d. D6 y' m; H9 W; \' g* e& u
// time, we create a Schedule that says to use the
# x( R1 ?1 `5 U // modelActions ActionGroup at particular times. This% e8 j+ h6 A- D8 Q" s4 o
// schedule has a repeat interval of 1, it will loop every
7 m5 E+ U5 d. z# i/ I: @ // time step. The action is executed at time 0 relative to
, B+ c+ _; |9 U // the beginning of the loop.
9 Y$ ]; P" F2 J f/ I" e
+ K) b; l. o6 t; U; \1 O- b // This is a simple schedule, with only one action that is+ Y/ H. g3 q0 j4 d
// just repeated every time. See jmousetrap for more$ l# |. w g# J% c9 L
// complicated schedules.' B5 s& ~# g0 {8 H9 v& B# q
( H6 P" q5 }# z$ S! w" y2 W
modelSchedule = new ScheduleImpl (getZone (), 1);4 G' v3 \, \ A7 c( j$ j6 D1 [8 M
modelSchedule.at$createAction (0, modelActions);
5 _( q K. z, F* o - B) c$ `' Z3 N; C
return this;* r( }. S, L% {: r$ s- K0 ]
} |