HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:9 T8 C9 r2 F* J A6 l: z2 g
/ B1 _0 b) @# N' n public Object buildActions () {; r7 a8 _, y- C2 l: P
super.buildActions();
! N* X) I. S7 w( p9 I) W" ~ 5 t. @( V. U/ J+ _2 i+ `
// Create the list of simulation actions. We put these in
; ^1 j( [5 X; @' ` // an action group, because we want these actions to be
: o1 e. X7 ^8 ^; y% U+ i$ c // executed in a specific order, but these steps should) M/ T; Q; h6 Q" I, U
// take no (simulated) time. The M(foo) means "The message# G/ q9 p) r' q# J; Y' c* r
// called <foo>". You can send a message To a particular
4 A: [& Z5 _' u // object, or ForEach object in a collection.0 I' S4 H. K* \: N6 F; n f1 q R& F
5 Q' f$ A0 I6 A; a
// Note we update the heatspace in two phases: first run
- F! R7 q' G' S. s+ O- n // diffusion, then run "updateWorld" to actually enact the
& X' E; K. ^$ x$ U // changes the heatbugs have made. The ordering here is( [; N6 z4 h; d1 A
// significant!7 _. m. q6 x) c$ k" r# w
2 |" T$ ]( C) ^5 P1 ?
// Note also, that with the additional
h# p3 k# w) y6 u // `randomizeHeatbugUpdateOrder' Boolean flag we can q# N+ F" h" q7 ^7 G3 i
// randomize the order in which the bugs actually run
4 o1 P( u9 u1 `9 u# b // their step rule. This has the effect of removing any
/ c8 ^& \; H: N0 ?$ D' ^$ L // systematic bias in the iteration throught the heatbug
* z& l* M n6 J- u6 x- a // list from timestep to timestep
7 D( d3 w# E/ t$ \% ~: i
) U9 @! L% L* Z // By default, all `createActionForEach' modelActions have, ~3 [" j( d6 | A
// a default order of `Sequential', which means that the/ _" ~ A3 {, u
// order of iteration through the `heatbugList' will be
5 o2 ~& W4 a+ t5 E8 r4 { // identical (assuming the list order is not changed5 }' Y5 A0 ^0 @4 t. t3 \' _
// indirectly by some other process).
& w* n" `, `$ @5 U1 Y
: L2 l% M" V8 g- [; S3 G' T modelActions = new ActionGroupImpl (getZone ());
$ {: c$ C. C8 {! w
6 I3 l% T7 z' o try {
# b5 ?$ @. G7 ~. v2 {3 ` modelActions.createActionTo$message
3 Y4 d4 W# {" k7 ?( e2 |9 T6 Q (heat, new Selector (heat.getClass (), "stepRule", false));% h5 U7 p8 \8 W2 m% f1 R6 @) J: I
} catch (Exception e) {
7 w8 @% ~" g3 m System.err.println ("Exception stepRule: " + e.getMessage ());8 y: ^! ^8 n( o9 x" S
}4 w: s, m: [" h3 _! y
4 @ {$ K4 L: o- Z: J
try {8 q* l% t3 h. o; C
Heatbug proto = (Heatbug) heatbugList.get (0);
' c2 p3 \8 _8 a( j Selector sel = 3 X. [% ~% x1 j x( G' g
new Selector (proto.getClass (), "heatbugStep", false);
0 b8 H( |' C5 A( J2 L4 H actionForEach =
9 d! l' b1 Y; w: L# L modelActions.createFActionForEachHomogeneous$call! h% A" `; |% u
(heatbugList,: p L3 P, f. ]: a0 k# ^1 a* N
new FCallImpl (this, proto, sel,# }5 Q! g' \. x4 v& ~- [; I; j
new FArgumentsImpl (this, sel)));
) P' C r4 M3 {/ U- B* y: f } catch (Exception e) {
# e' A2 y6 e$ o6 r9 {: O4 J G9 Q* H" R e.printStackTrace (System.err);% M' _! l2 ~" V. [
}$ K. Z. J+ J8 X% x; w
+ V! ^. }4 ^/ Z
syncUpdateOrder ();
8 N3 |! a( R J
/ K3 a& t3 B# f j. }/ m5 K try {
/ F" l" @# w% d! a" f7 ?) N modelActions.createActionTo$message
" G! T- O3 _: Q2 Q! i (heat, new Selector (heat.getClass (), "updateLattice", false));
5 j/ X9 ~7 d$ g- q } catch (Exception e) {- C: q1 p0 H, a# N1 p1 e7 g
System.err.println("Exception updateLattice: " + e.getMessage ());
4 m/ p. Z. c9 n2 Q( @ }7 G8 p5 P- p4 M
5 H2 }( d0 ~- i // Then we create a schedule that executes the) ^' ] a) y! H! ^' ~
// modelActions. modelActions is an ActionGroup, by itself it; K- m/ _: Y3 O
// has no notion of time. In order to have it executed in
9 S; R# U8 u, q, x2 v. f // time, we create a Schedule that says to use the
- ]- B( C0 X+ W9 m' x, y // modelActions ActionGroup at particular times. This
5 A1 c& `& m* w* j3 a! p // schedule has a repeat interval of 1, it will loop every5 {! O; g* x5 L+ w* D# R) v0 R1 C
// time step. The action is executed at time 0 relative to
+ ~8 ]: r" S. Y4 r; K // the beginning of the loop.9 B" Z2 v) [ X% {6 {( X- y
1 h, g+ P" Q! A' g7 G0 F8 O
// This is a simple schedule, with only one action that is
* T/ G# T1 G1 ~2 H$ X" w' f // just repeated every time. See jmousetrap for more
6 N( h- g4 ?$ {' C" E/ Q' d+ b // complicated schedules.4 y4 W' t" A9 d# F
/ ?! x. S# j; ?
modelSchedule = new ScheduleImpl (getZone (), 1);3 A! ^6 j- q" |5 v
modelSchedule.at$createAction (0, modelActions);4 i0 s5 c+ Y0 a
' I3 u$ a8 A I3 f return this;
/ M' N8 }, B- I } |