HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
2 Z. U7 p. ~( \. E: K0 [& h
& s$ O( ]7 A( k; F" z$ O# x public Object buildActions () {
& Y; v+ e' Z' N- c1 m' x super.buildActions();- z$ }) N+ E+ ~8 O1 L; g
( J( d/ I4 e5 \4 B1 F) Q; ?) z
// Create the list of simulation actions. We put these in4 B. J3 |" _. x
// an action group, because we want these actions to be
) i6 V! C& d5 f& _2 k // executed in a specific order, but these steps should
2 _ n T' y1 F8 @# J* n2 s8 P // take no (simulated) time. The M(foo) means "The message x& j( D2 `! K) a, O+ X+ `
// called <foo>". You can send a message To a particular
: a- Z% m$ `, X4 C4 [ // object, or ForEach object in a collection.3 r8 x. [& y6 l* p7 |7 d/ \; {
' }6 t8 h' C) w, j4 A) B; J
// Note we update the heatspace in two phases: first run
0 J) r( e7 V6 H1 J6 }: x // diffusion, then run "updateWorld" to actually enact the; ]0 A9 F; T' b3 c S! g
// changes the heatbugs have made. The ordering here is
& u3 A4 P) T0 Q" U // significant!* V. @3 c, Q2 ]2 O- s+ A2 ]) a: M
+ W/ X7 I. v/ o% d( S/ d
// Note also, that with the additional
: }3 i/ W& c+ ^6 ^. L, Y$ G7 L$ N. u // `randomizeHeatbugUpdateOrder' Boolean flag we can
4 e8 `# ~$ E" A H2 I // randomize the order in which the bugs actually run
2 ^$ t( C d; A- a; P1 |6 t0 |# U // their step rule. This has the effect of removing any
4 E: s1 @) C2 O% e% I3 G // systematic bias in the iteration throught the heatbug
2 t/ }/ ?: K5 C& i8 S, @. z // list from timestep to timestep
2 u; P; R! D' H3 E8 K! j& X ; a8 l" U( _6 s* a4 q
// By default, all `createActionForEach' modelActions have ?6 O$ J4 `6 g2 G! N" P3 g
// a default order of `Sequential', which means that the8 c [$ N* o& o" X
// order of iteration through the `heatbugList' will be* ^! _1 ?2 a6 E
// identical (assuming the list order is not changed* J. x9 j# r+ I
// indirectly by some other process).' z' Z4 Y Y: P4 V
/ E. b) j: {% d; J modelActions = new ActionGroupImpl (getZone ());
* M* f) @+ @% B A
7 E8 i; \( w, U1 e e/ H try {- G# f0 d4 [0 ]7 }0 K
modelActions.createActionTo$message
- F* n8 u( i. {9 M8 ^8 ] (heat, new Selector (heat.getClass (), "stepRule", false));8 z. y# q% T; m0 T( J) B- M: O
} catch (Exception e) {7 I+ J, C+ q$ _8 v: v
System.err.println ("Exception stepRule: " + e.getMessage ());: K9 Z7 l* K& j/ J6 P
}
. R% q: }0 I* j# T5 y' c% ?. C6 b+ i' M* u) g8 X+ H
try {
- u# ]2 W: f- ~8 ?: l6 h8 ?, Q0 \0 i Heatbug proto = (Heatbug) heatbugList.get (0);5 n/ s' T: h( Y# V5 t/ i
Selector sel =
' j+ Y( d, T/ I3 R6 l. @- v# i new Selector (proto.getClass (), "heatbugStep", false);
$ Y' y) v) ~3 j actionForEach =! I; b9 Y1 g) F8 n) x
modelActions.createFActionForEachHomogeneous$call
. M" M0 d) a9 F! ?6 B3 R0 t (heatbugList,
3 v" q2 v$ t n3 ] new FCallImpl (this, proto, sel,/ V- L: Z- Z B2 d; `9 D
new FArgumentsImpl (this, sel)));9 i, \+ Z" \8 t2 W/ G6 r# r
} catch (Exception e) {
' Y- V0 a& b( C) W0 a8 g e.printStackTrace (System.err);
4 m9 R& e% h: h% b, U2 }5 F1 m }
$ J u" U! Z- g* }+ G1 k) G
) `) P6 k l; ` l0 b; t syncUpdateOrder ();
2 O; L* d, w. K2 a+ _9 ?# k6 B$ K- S5 X+ q% u
try {
# B6 Q! M& v6 r$ n) a modelActions.createActionTo$message
8 a/ k$ N2 s8 G$ s (heat, new Selector (heat.getClass (), "updateLattice", false));/ `* a$ K. r( C4 a8 N
} catch (Exception e) {
7 |6 q+ E& A* N System.err.println("Exception updateLattice: " + e.getMessage ());2 t! i' D. Y) B9 P# R! k
}7 i# W' P# l; i0 r& g
6 I& P+ T; K; N/ b- C. o
// Then we create a schedule that executes the# L( _: m2 |1 v/ i* W; ?
// modelActions. modelActions is an ActionGroup, by itself it$ F5 W9 Q) E8 D/ t8 s+ L
// has no notion of time. In order to have it executed in8 ^% b: }* y/ L& p5 ?
// time, we create a Schedule that says to use the
3 \% r( @& H- X, e5 W7 S, p3 x // modelActions ActionGroup at particular times. This
* y% n: e; r. f* \ // schedule has a repeat interval of 1, it will loop every
. y1 G8 T4 w; ]! ^' n. G // time step. The action is executed at time 0 relative to) X4 n& B- E- v. h5 v- v( q- a6 U
// the beginning of the loop.
1 K. ?6 R0 p$ Z' r, ]$ H2 d( A, a8 [6 y
// This is a simple schedule, with only one action that is
2 I2 \) N# @9 g8 Y: t // just repeated every time. See jmousetrap for more
+ |2 N7 q# H+ E) x // complicated schedules.3 ^# a/ h. ^- [" j5 L k7 A7 N D! r
- ~ W; @1 `* U. d! q( `
modelSchedule = new ScheduleImpl (getZone (), 1);( [9 J, Y' V3 j( ]! ^1 ]
modelSchedule.at$createAction (0, modelActions);3 Y7 k, f0 C+ B- z
/ Q' Q5 `, ?3 `: u3 o return this;- m9 A; D0 |8 x
} |