HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
9 c) b+ @' A$ e- x4 t q
) ?1 H ^6 }1 g public Object buildActions () {" p9 X5 H- a; X4 d( t2 W, k% }9 |% c
super.buildActions();
3 x, l- n1 y- r2 \7 N5 \# ?5 m
6 W5 s |1 l! E$ v" w$ l // Create the list of simulation actions. We put these in! S, O/ K5 z& W4 _5 L
// an action group, because we want these actions to be6 D# C3 g6 s) ]2 w$ ?9 O. U
// executed in a specific order, but these steps should
2 H! Z6 o/ k; Q // take no (simulated) time. The M(foo) means "The message" C0 O R, W: E, N3 @
// called <foo>". You can send a message To a particular: b- z" F4 j) w1 W* m# S3 P
// object, or ForEach object in a collection.
3 k5 m+ `% @6 e0 n7 m: L4 J9 p
2 U3 u# X6 J% s- V' G. G // Note we update the heatspace in two phases: first run X Z8 A* d4 a/ I4 K7 `# g$ J
// diffusion, then run "updateWorld" to actually enact the, K/ ]+ Y. x5 ? W9 @' |
// changes the heatbugs have made. The ordering here is
& ^1 l { m1 m, Y // significant!2 w$ m) H- _, j: s2 {& t* c
0 q+ e0 N6 d2 d$ e // Note also, that with the additional5 J V" R* S) \
// `randomizeHeatbugUpdateOrder' Boolean flag we can
7 {9 ?" x5 t) t* d // randomize the order in which the bugs actually run# u$ D/ G8 \8 @* D6 b
// their step rule. This has the effect of removing any9 l3 x' t2 a R- b" {
// systematic bias in the iteration throught the heatbug
0 D8 y( c+ |; j$ T/ T // list from timestep to timestep
' }/ Z" F, r/ {' o- i9 l% A
5 a1 f# ~5 p0 t$ D, D2 H9 ~ // By default, all `createActionForEach' modelActions have
; k1 M: I% m) r- t: q% G // a default order of `Sequential', which means that the
- h4 H, a8 o$ w. `+ _0 [ // order of iteration through the `heatbugList' will be
5 i! V0 Q- ?$ ]5 E0 v3 s // identical (assuming the list order is not changed( ?, e: c& g6 U* w9 c- U! T- j+ {+ x
// indirectly by some other process).
& x1 r% c7 M* e; |6 n : p9 @" V0 C/ K( P, M2 l1 I6 G
modelActions = new ActionGroupImpl (getZone ());
8 H3 C5 b) H A, y
0 h4 O: f4 U+ C+ i7 n, r1 x try {1 \: C7 R+ y4 ~* N4 F0 ^, v
modelActions.createActionTo$message6 Q |. f5 N9 K' o G& D
(heat, new Selector (heat.getClass (), "stepRule", false));2 Q5 ?, Z0 y: O1 D
} catch (Exception e) {
' Y1 n: z6 x/ o) b4 n System.err.println ("Exception stepRule: " + e.getMessage ());, n0 \. z y; @' M! H. e
}
0 N" n/ ~1 }/ R5 |' l4 W+ n
3 k1 b! @; u! @6 I try {+ L7 Q! w5 k9 c- ]# \2 K6 Q
Heatbug proto = (Heatbug) heatbugList.get (0);
: ~* q) N' o* l" i* { Selector sel =
" r$ ~% u F: f0 F: O/ R1 X) e new Selector (proto.getClass (), "heatbugStep", false);
. q% l8 n* `0 C actionForEach =
9 o* z" Z5 `1 _, J% a3 w! a9 h( @ modelActions.createFActionForEachHomogeneous$call
: `5 Y- H8 j' G$ I! P- f: v (heatbugList,9 R. o9 U, g# D8 t
new FCallImpl (this, proto, sel,
( F8 v; T7 r/ W! X) R new FArgumentsImpl (this, sel)));, p+ t2 N- s* E+ X" b/ `0 m- i
} catch (Exception e) {
f1 ]" c. o! B; O& L e.printStackTrace (System.err);' d7 f1 Z8 @" E) ?
}1 [" k h2 c+ \! ]" b. j0 Y
& \5 a% ` H$ M. E3 v" k syncUpdateOrder ();* K8 r- T0 q0 D7 y3 o" w: |" B
' P) D* i5 W- O9 q) ^) t
try {# Z- d( o3 r1 o. _" {4 N: \8 M
modelActions.createActionTo$message o9 {/ @; j9 `) x7 J( t
(heat, new Selector (heat.getClass (), "updateLattice", false));
{: j4 {/ T. B7 | } catch (Exception e) {
8 x9 M+ _3 c5 _ P% X/ h System.err.println("Exception updateLattice: " + e.getMessage ());
L& E L3 @, k8 q- c }" M7 X( j8 _) ?) `$ Q$ s# P+ N
2 q9 k. g: {7 k% C5 f/ W" U // Then we create a schedule that executes the% P( V, O- G. u3 y
// modelActions. modelActions is an ActionGroup, by itself it/ x& ~" v7 W+ t: Y+ A
// has no notion of time. In order to have it executed in
1 t- L2 T& @% Z$ l6 @& r // time, we create a Schedule that says to use the9 }5 q& |# C* _
// modelActions ActionGroup at particular times. This: C& ~! z8 }# S# R8 M, F3 |
// schedule has a repeat interval of 1, it will loop every
6 W- X4 m/ ?# L1 `! y // time step. The action is executed at time 0 relative to+ C. G- T. ~4 Y4 L6 v' X3 F
// the beginning of the loop.
8 [2 l7 H5 F! J* I' t- Y6 K( o
* V% @7 \# x, c // This is a simple schedule, with only one action that is
; p) O( g# ?6 y0 O/ L // just repeated every time. See jmousetrap for more% ]) a8 }, S, n1 V% y
// complicated schedules.
2 p9 c$ p. U0 {& w+ u9 w9 v& G $ n/ m5 ]5 V$ R9 v7 j* m
modelSchedule = new ScheduleImpl (getZone (), 1);
+ M l' T# l2 r0 f modelSchedule.at$createAction (0, modelActions);
: [6 |9 h+ Q3 S1 m# z' W% E! f" }9 j
+ q2 P$ X1 U" I: }: h; O* N4 t; m return this;
0 Q( L* T9 ~, B } |