HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:! O$ Z# N- g1 J) A3 U
# m+ Y: Z Z# m8 s public Object buildActions () {! D: q; r3 m' t7 o, f! I9 L
super.buildActions();
2 k n- o- y: ^
( A1 ]5 x5 `- F" t" I- `' U // Create the list of simulation actions. We put these in
5 W: P% d! a% e5 M9 a# [: I // an action group, because we want these actions to be
* M+ P2 V/ e$ g* M3 ]) h4 t // executed in a specific order, but these steps should1 N* j$ X X2 j8 |6 q: [
// take no (simulated) time. The M(foo) means "The message
' |; q+ k5 p/ J+ ^# D% ?+ i1 T // called <foo>". You can send a message To a particular
* V3 t! K$ }" A6 R) g8 B, R+ l // object, or ForEach object in a collection., t0 K3 M( Z, s" h; E8 ?
5 s7 i5 I/ o- ?0 u9 O* W
// Note we update the heatspace in two phases: first run
1 D" `$ T" ?" A" C // diffusion, then run "updateWorld" to actually enact the& ?1 } ^) H! {- ?! }
// changes the heatbugs have made. The ordering here is
$ F, S$ R& v0 t8 |0 H" S // significant!
* v8 o/ i0 d. g2 A 9 O, z- u/ ]$ K# `. E6 @# Q
// Note also, that with the additional7 E" K- A2 u! F+ c' J, E
// `randomizeHeatbugUpdateOrder' Boolean flag we can* v& v" ?) j& ~
// randomize the order in which the bugs actually run
4 M8 e. n: j( n4 N% b6 v2 ` // their step rule. This has the effect of removing any
0 L+ _ b& l4 r3 d; b9 {+ m // systematic bias in the iteration throught the heatbug
' d" j* a( {8 i // list from timestep to timestep
+ L. H" ]3 g* E5 r5 J5 K! g$ W$ W
$ z9 c) [% b0 h0 u. }8 W- } // By default, all `createActionForEach' modelActions have ]2 `4 Q% k* b) t- S+ p
// a default order of `Sequential', which means that the
1 c) l5 j1 S( r0 W9 x // order of iteration through the `heatbugList' will be; J+ P; a# c1 N
// identical (assuming the list order is not changed1 x7 ?; u w# x
// indirectly by some other process).2 `3 G5 D: P+ H9 @/ K6 y H
; e3 h% Z4 E8 G3 w modelActions = new ActionGroupImpl (getZone ());
& s0 O% {$ b: Q
& e( ^6 M9 _" O- ` try {
% `0 M/ r7 [: B( F+ C/ t5 ]7 p modelActions.createActionTo$message( w8 f9 O* r6 q$ W8 ?
(heat, new Selector (heat.getClass (), "stepRule", false));" ^( t" P% Q9 U) ?# r8 G
} catch (Exception e) {3 ~ Z2 t' Q, _0 y
System.err.println ("Exception stepRule: " + e.getMessage ());
Q& N9 i; f( A' |6 a }
9 L: P% O" @2 ~( O {) L) ` a5 {0 l
try {, X! I! M/ S/ n- A9 H8 {' E$ `
Heatbug proto = (Heatbug) heatbugList.get (0);9 w6 A* S' d% v7 D
Selector sel = 2 j" y4 J3 ^) Y* ^
new Selector (proto.getClass (), "heatbugStep", false);% k) g4 C& \/ S/ Y
actionForEach =8 Y H0 F% f4 h$ A% r
modelActions.createFActionForEachHomogeneous$call
5 i. D3 Y Z$ n4 u; g2 v1 ` (heatbugList,3 @* V! K. G7 z, ~2 H9 i& m
new FCallImpl (this, proto, sel,
6 F% \, c# a& R; B3 S" o new FArgumentsImpl (this, sel)));8 r( ?/ W+ x7 n' ]
} catch (Exception e) {9 }' H3 a+ l# J
e.printStackTrace (System.err);
. H0 w1 }# T4 E$ ]( L; o }
1 O& U; V) `, a: _7 I : E" a, `8 s% W; a
syncUpdateOrder ();
) a0 t. K5 p+ x# ~
' l+ V2 b$ r M7 o: I: r try {, b: s% S: ^6 ?+ V' y0 ]( f
modelActions.createActionTo$message
$ t2 T3 Q" H. A4 d# N (heat, new Selector (heat.getClass (), "updateLattice", false));# A; z; `) o4 G- Y4 {+ }
} catch (Exception e) {
c8 m. G, y0 ~ System.err.println("Exception updateLattice: " + e.getMessage ());
/ E2 {4 N5 a1 ^: [1 G }
& s t7 v. D+ Q5 D 2 P5 z& ^* r$ v! \) A/ x
// Then we create a schedule that executes the" x6 V6 c* p8 g4 P
// modelActions. modelActions is an ActionGroup, by itself it
8 U0 V) p& Y7 ^8 M, z3 { // has no notion of time. In order to have it executed in. `1 f8 f1 E# N0 g3 `3 [; Z
// time, we create a Schedule that says to use the
' m8 ?$ l+ I8 P // modelActions ActionGroup at particular times. This
6 ^/ U' w, m% U( V // schedule has a repeat interval of 1, it will loop every8 I, g+ c8 s J& |. p9 r$ p
// time step. The action is executed at time 0 relative to
% F7 F7 @/ K" P/ |( p // the beginning of the loop.
- ^8 G9 y R8 j9 d% e8 e: E |% Q, [2 ]" q1 z( j) a
// This is a simple schedule, with only one action that is
+ c5 Y# e& z+ v5 Q7 v) } // just repeated every time. See jmousetrap for more" z0 l6 ^! F( ~
// complicated schedules.
0 H; u% m6 l1 `8 w- H3 A8 Y6 z , C; P- K O E9 ^. i9 R
modelSchedule = new ScheduleImpl (getZone (), 1);5 j! q v7 B- O! [" f" [+ |
modelSchedule.at$createAction (0, modelActions);
# d V9 \/ M! B + _/ ?0 }8 i- p/ W
return this;
# Y# T7 ~0 r$ h } |