HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
6 @8 A7 I- N' v$ i
) f" c' @4 ^$ E- u& W5 M- \! c# B public Object buildActions () {/ m0 o j6 L6 S% `5 G2 Y$ o: p
super.buildActions();
( ^* ?# _5 T$ ^% ] . s/ Z: {$ w, E6 u
// Create the list of simulation actions. We put these in
2 p0 D7 N3 [2 D' P L# K5 c // an action group, because we want these actions to be9 ~1 v/ _) i! L/ G4 s0 A
// executed in a specific order, but these steps should
, |5 |! _4 C2 z // take no (simulated) time. The M(foo) means "The message% m7 {" p4 j/ n
// called <foo>". You can send a message To a particular z6 r- I+ N2 L o6 B8 w6 s
// object, or ForEach object in a collection.
% S' S4 G* z: x4 a
, h! R9 O }4 W // Note we update the heatspace in two phases: first run- C( s' P8 C' \$ Y1 p; }* l
// diffusion, then run "updateWorld" to actually enact the( _, w3 e) n( ]6 g% O. u
// changes the heatbugs have made. The ordering here is
8 d2 `9 i( C; W9 L7 j2 F // significant!3 i& b4 X# ~- P0 D4 @: ~
' @* G9 a$ L7 e1 e1 n, u! Q // Note also, that with the additional
/ m0 V3 F, K ^2 R. ^* A% b8 X- }% E // `randomizeHeatbugUpdateOrder' Boolean flag we can' [3 l( X- H/ D) j
// randomize the order in which the bugs actually run
7 J& y+ e7 ~2 W6 Y // their step rule. This has the effect of removing any/ L, p& T$ e& | g. \% x) w
// systematic bias in the iteration throught the heatbug
* M' E3 c2 P2 ]+ K! h // list from timestep to timestep' K# |. }. l" c
6 _7 ] v% O9 `$ u // By default, all `createActionForEach' modelActions have& }% N4 F7 P# B* D& `5 E
// a default order of `Sequential', which means that the& k4 O4 W' m4 [" E l( {7 E
// order of iteration through the `heatbugList' will be( l/ o* W& |; M. O+ l5 y
// identical (assuming the list order is not changed
, U. W, R5 f- A4 D' n // indirectly by some other process). A# ]4 ?- Y! k$ M& t; s
# B' B; a: e4 M modelActions = new ActionGroupImpl (getZone ());
( k8 e8 r. b5 j! `9 s
6 d6 |3 ?2 i; c$ Q6 U try {
# M# ~! @" i4 { modelActions.createActionTo$message
$ l' s7 b' J5 P2 X0 [1 @ (heat, new Selector (heat.getClass (), "stepRule", false));# j+ _0 A" J) A! B- Q
} catch (Exception e) {
1 e8 H( a/ }$ l' m System.err.println ("Exception stepRule: " + e.getMessage ());- K% l5 W9 o9 m8 S
}# O7 x: P+ g1 g: ^, D ]
+ `9 D! t' F- v- G% b/ K) L3 Q try {
6 c( G7 I1 N+ O' F, ] Heatbug proto = (Heatbug) heatbugList.get (0);
5 [( s/ k/ A' w6 {; |4 P Selector sel = ; X. K. f3 q: S- F0 K S, O' l
new Selector (proto.getClass (), "heatbugStep", false);
- s! B0 E; q8 O3 b7 `. i( V actionForEach =
; l3 w* X0 D+ V modelActions.createFActionForEachHomogeneous$call
) }, H7 R* f, ]' O& a (heatbugList,0 f5 p4 ^5 y H0 f
new FCallImpl (this, proto, sel,
5 L7 _! [/ X/ a0 y+ D new FArgumentsImpl (this, sel)));, _' u: L; j% S2 g: c% ]0 j$ D- x1 `
} catch (Exception e) {
( D, Y. j& w( u, M5 O; x2 K s7 K' F! @ e.printStackTrace (System.err);
; R3 b( D: w5 p; ]8 {1 A$ h }& K8 [; k4 U% J) g% Q2 [9 e
$ C- \* T2 s: t3 ~
syncUpdateOrder ();
+ u( z1 S! L& E# i/ ^5 z! n( Y$ C8 c# v8 I
try {# f3 g$ s8 w' Q/ B5 u
modelActions.createActionTo$message + K7 c; A! F/ y0 W$ m H- u3 _+ M
(heat, new Selector (heat.getClass (), "updateLattice", false));+ C/ J v7 H% a9 T' X/ K) K/ d5 p4 X
} catch (Exception e) {3 I- t( _4 v2 y+ O
System.err.println("Exception updateLattice: " + e.getMessage ());
0 z- Y( X1 g0 W4 E2 _/ [) B }
) u( K- i3 F6 q M" G" L/ y1 t, S
) Z. E# |" d& f: M3 _ // Then we create a schedule that executes the% [1 K# y/ d+ v) T
// modelActions. modelActions is an ActionGroup, by itself it
! M, K9 ]$ g6 ~. O% L // has no notion of time. In order to have it executed in
2 ?% ^1 B/ m/ N, v' n: @" X // time, we create a Schedule that says to use the" h7 d) g' q* K' S2 H% b1 l/ i
// modelActions ActionGroup at particular times. This
6 o- J- T6 U6 V1 [ // schedule has a repeat interval of 1, it will loop every
, R2 C, o9 j8 [$ d // time step. The action is executed at time 0 relative to9 D% O5 ], Q6 T9 s
// the beginning of the loop.
- G) S1 W0 }# W: D/ u; B! X0 Y
& X k7 m, o E& Y4 y! `5 { // This is a simple schedule, with only one action that is- N! f; G4 t: x
// just repeated every time. See jmousetrap for more
) l! T I( |/ v* o4 C5 I' y, I // complicated schedules.
" ?. I2 |' l) L w2 S 5 A) [ u h; D; Z
modelSchedule = new ScheduleImpl (getZone (), 1);
3 {: m, m g* G) p6 d1 K* S modelSchedule.at$createAction (0, modelActions);3 g0 }* X7 C2 g7 X; @
8 E$ f8 n7 I0 \ H8 f7 O2 ` s, B D5 L
return this;; v. Z4 ^; q$ }4 t4 K3 \- b' W. k
} |