HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
; i; k3 Y* q5 b
0 l: S& b, Z6 Z1 K public Object buildActions () {
1 Y( {& l/ z+ I7 @+ Z! D* F- p5 L super.buildActions();2 x/ A: B- K6 k9 K( o3 H
/ M' j7 F1 c5 S" I' b* t
// Create the list of simulation actions. We put these in
* I4 {) E6 N& ] // an action group, because we want these actions to be) v& B4 V$ o! r4 H3 I" R. p
// executed in a specific order, but these steps should
" M+ D* @. q0 [3 r4 \ // take no (simulated) time. The M(foo) means "The message+ x4 F* d3 {/ C3 a8 U! L, ?/ L
// called <foo>". You can send a message To a particular- D# Y+ F, |) ?; p! H% I, [
// object, or ForEach object in a collection.
5 d1 X5 {0 @/ h! k
1 L _" B* }6 m# M d3 J! e- t$ X4 A // Note we update the heatspace in two phases: first run( g2 k. q- e& k8 c; C; n# Y
// diffusion, then run "updateWorld" to actually enact the
2 N6 d* m5 c1 a8 B4 b // changes the heatbugs have made. The ordering here is9 g- M K) U3 b7 h) F2 m+ Z0 l* a% F$ |
// significant!
: R. I: ?1 J: ]% D' p' Q' J ; h4 G4 |! j) b) B
// Note also, that with the additional
& @, N7 E3 ?/ \; ^1 R" d // `randomizeHeatbugUpdateOrder' Boolean flag we can
. e1 A* [) I8 \6 C! h P" b // randomize the order in which the bugs actually run$ X: l* r1 n7 X, x! u- B; K
// their step rule. This has the effect of removing any3 t, J0 Z t4 L) n$ E- Z- E# P# P
// systematic bias in the iteration throught the heatbug
1 \$ A7 u1 ~% c( V0 t( t // list from timestep to timestep
* o$ q$ j5 {. [; V ' g8 R$ K F# q0 n4 j
// By default, all `createActionForEach' modelActions have
& r( f) C t. D* ]: p) ^ // a default order of `Sequential', which means that the
; j0 {3 o) r( P3 u- y4 k // order of iteration through the `heatbugList' will be" O" O- A( x$ e
// identical (assuming the list order is not changed
' j0 c }6 D* g+ q5 l5 k // indirectly by some other process).
! X8 h% \$ D. U. e " _2 F+ M' p! e; k" U
modelActions = new ActionGroupImpl (getZone ());
& r. p" C. D1 o" c- m+ S
2 ?1 L# [! k9 A6 C try {
4 F4 R8 D. j7 Z% D' a modelActions.createActionTo$message
$ ?& Z8 Z) e2 Z2 Z3 u+ j$ G& y' r" U (heat, new Selector (heat.getClass (), "stepRule", false));
- m0 m0 Z' R! r& }# m' J } catch (Exception e) {/ H: @ O0 N* I
System.err.println ("Exception stepRule: " + e.getMessage ());7 [& y7 A2 i) n* Z6 g3 r
}
2 r( m7 e8 l/ ~3 s2 W* \% t: ]6 J3 a' b% q1 D, j0 x) q- b; ~ p
try {
6 M6 \4 [8 g; \0 I6 _; d1 r Heatbug proto = (Heatbug) heatbugList.get (0);, Y% H% {9 O* r: U3 q+ m! j2 ?4 ~+ q
Selector sel = ! V# V! K6 X& s7 z. I3 g3 s
new Selector (proto.getClass (), "heatbugStep", false);
/ H6 l9 i2 m9 P# v# V2 i* O actionForEach =
' l5 u$ ~6 _% ?4 D0 M modelActions.createFActionForEachHomogeneous$call1 ^5 z Q6 D4 p" u Q/ o" v
(heatbugList,
. B3 [2 V0 I+ \" @- U& B2 t5 n new FCallImpl (this, proto, sel,
. G! i7 Z M' q& s: ] new FArgumentsImpl (this, sel)));
J% {: u) J" n9 ]+ v } catch (Exception e) {2 B4 C( S! l5 x/ w: \
e.printStackTrace (System.err);
+ k }! ^, b _ }
. P4 i; ?# g! Z: m$ { L & {& I/ k* P( Y
syncUpdateOrder ();2 T8 I) K7 I) |
0 |7 e' l- N# x( D6 H try {
6 o5 b6 g" L& b7 ?: R, [ modelActions.createActionTo$message & o; X+ W( f% S5 `
(heat, new Selector (heat.getClass (), "updateLattice", false));
4 C/ H7 G2 G8 R" Y, F, K } catch (Exception e) {
7 U' p* [; @0 }/ y& O9 _ System.err.println("Exception updateLattice: " + e.getMessage ());
4 R; n& n0 R) p# D9 J% W; K }
" U! i# R5 Q0 E9 j; V9 x # }7 K! r7 k! L* s
// Then we create a schedule that executes the/ h) f7 Q X. l% j9 p
// modelActions. modelActions is an ActionGroup, by itself it
8 Q+ F. i# ~) Q" A1 M // has no notion of time. In order to have it executed in
2 V) R; T" L% w; L0 [( R8 D" X // time, we create a Schedule that says to use the2 i4 T2 D: }8 B/ t
// modelActions ActionGroup at particular times. This
* S1 v6 r( s$ m2 Q; [( F1 J // schedule has a repeat interval of 1, it will loop every
2 z V3 X, U) h0 I! P& P' ] // time step. The action is executed at time 0 relative to1 `9 D5 N4 n1 S: ^8 W( }8 `
// the beginning of the loop.6 w4 m6 u: z6 c6 ~* a+ L# s
* g( @; L2 P0 a' v+ _
// This is a simple schedule, with only one action that is
4 L3 F3 x5 H2 Z# ~# k" H! C; d // just repeated every time. See jmousetrap for more
7 {5 k* [, H) z; M4 |1 J // complicated schedules.3 N/ y% t% x( R; P
& [$ i9 l9 X: [9 ~ modelSchedule = new ScheduleImpl (getZone (), 1);# g0 T/ ?9 S" ^9 v1 y
modelSchedule.at$createAction (0, modelActions);
( p4 H3 R- _7 {* o2 J" I1 C1 U c ^ 1 B! V5 x& |+ l9 i+ B
return this;
! }! Y: z* d6 U; e1 r } |