HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
7 B" f- |' B1 n8 i P" P0 I% f( p/ w! M/ K2 D
public Object buildActions () {9 s0 ~9 j" k( _ `' G9 O) f2 n' I
super.buildActions();6 G- x3 }* y% ^. D8 d7 y3 r
7 P' G/ ~4 S% V e$ D8 h7 K E" T
// Create the list of simulation actions. We put these in
+ Q/ w- a0 ~+ }7 v, S, b // an action group, because we want these actions to be
: E0 ]7 b$ P; M2 c, M // executed in a specific order, but these steps should( s' y Q, x; a9 ^; ^$ {2 u
// take no (simulated) time. The M(foo) means "The message( O/ O$ f* O& V8 B5 P# n3 d
// called <foo>". You can send a message To a particular: c0 b6 y [; L
// object, or ForEach object in a collection.
, J) s y( v* T 7 s1 t1 B0 p) j8 h6 G
// Note we update the heatspace in two phases: first run" s1 S$ @5 k3 l
// diffusion, then run "updateWorld" to actually enact the* @1 y5 L% N9 W
// changes the heatbugs have made. The ordering here is
3 {3 e) v) j- {- w) `3 R // significant!
! s+ m( |" z7 O$ F4 _8 i; A* w
/ q9 u. u( A9 Q // Note also, that with the additional
, X5 m2 U2 w. ^: i. W/ W) O( f( C; [2 S // `randomizeHeatbugUpdateOrder' Boolean flag we can# j2 U4 s# G+ t2 ?+ }5 L
// randomize the order in which the bugs actually run( U# u0 p: T# U3 {1 y( @4 R& o' }
// their step rule. This has the effect of removing any2 D1 Q/ S5 Z0 P" A
// systematic bias in the iteration throught the heatbug% i" r! M% g# o' g6 P( H e
// list from timestep to timestep
- v3 X% ?) M7 v) G1 z6 Q( C
% Z* P' x' m$ { // By default, all `createActionForEach' modelActions have) P% b; b7 a9 A, M5 `3 V3 `
// a default order of `Sequential', which means that the7 L |8 t& i; v8 R2 Q6 y" M
// order of iteration through the `heatbugList' will be
$ X5 I8 s6 o$ J9 T) g0 z+ K$ J# T* F // identical (assuming the list order is not changed y5 M1 H1 A7 M
// indirectly by some other process).6 r3 \' e0 u; s7 g
$ }8 A6 g* X3 N8 }' n6 K. s; Z modelActions = new ActionGroupImpl (getZone ());) a/ p9 Q1 y) u9 Y5 J2 c0 t
+ [# w% }/ a8 s# i; M try {, ?1 e4 E( F( w# i
modelActions.createActionTo$message, c8 w/ Y* h4 O7 L8 A9 @* l
(heat, new Selector (heat.getClass (), "stepRule", false));
( F. k7 X; T' k" G7 W } catch (Exception e) {) r7 h1 _+ v$ B8 F7 s
System.err.println ("Exception stepRule: " + e.getMessage ());
: b" a8 g: N; x( D p }7 R' L0 V8 z* Y, u, p5 f) H
4 w4 z$ |4 q0 F1 l
try {
0 W1 h* Q" W& t% Q: l6 z Heatbug proto = (Heatbug) heatbugList.get (0);
& D7 l' P9 x Y. j) x1 y+ L Selector sel =
+ V! O4 @+ o0 m0 } new Selector (proto.getClass (), "heatbugStep", false);! Q* `7 Q8 \# m4 x
actionForEach =
7 L/ z1 h3 `! n modelActions.createFActionForEachHomogeneous$call
: L+ ~' S: S& a# _7 J (heatbugList,
; |" l( _; U0 A- Y [9 ^ W9 b/ S new FCallImpl (this, proto, sel,1 T q5 [+ Y c$ c, s3 E, Q
new FArgumentsImpl (this, sel)));5 Y# g1 k) t+ f5 E6 ]2 E( {
} catch (Exception e) {5 H0 d6 k4 @7 a5 C
e.printStackTrace (System.err);
" u+ N7 |5 P u% D! o9 i* E }0 e' Y( w. C. k1 U/ Y0 _: S0 }
- m( A( {6 `; Y% k syncUpdateOrder ();
$ r' V) _6 z" o; Y c4 a U
2 U! s" S( g0 F$ O4 p( `2 _( p9 C try {
7 Y9 r, i: w* I1 q modelActions.createActionTo$message 7 F4 z) U! @+ \' R. r
(heat, new Selector (heat.getClass (), "updateLattice", false));
+ v! R2 }) z/ p4 r7 K% I4 ] } catch (Exception e) {
) | C# J% X1 @' C. [ System.err.println("Exception updateLattice: " + e.getMessage ());5 X6 t3 a; I% ?# d* ~2 U$ T
}
: @3 u. o& ]; H
4 W! I8 \8 n. i6 f: {) @* o4 ` // Then we create a schedule that executes the
: t! C9 Y* c% w) E // modelActions. modelActions is an ActionGroup, by itself it
' |. y8 b, Z) j# J+ B( } // has no notion of time. In order to have it executed in
: l' n* U$ Z7 h! a4 ~4 ` // time, we create a Schedule that says to use the
( R: Z1 O7 K3 \. @) {2 n; l // modelActions ActionGroup at particular times. This# {% F. I) q: n* X% O' K3 f
// schedule has a repeat interval of 1, it will loop every
: {2 H+ T9 B7 A$ e1 G, e$ k1 w7 z! o // time step. The action is executed at time 0 relative to* I3 s8 r) S2 c4 W+ w
// the beginning of the loop.
8 O0 R' f, Y' J) p: A7 e- C3 u1 i
& Q( P; l+ u2 @$ _ // This is a simple schedule, with only one action that is4 ]; T. ]9 a' z* u- R
// just repeated every time. See jmousetrap for more) ~& Y: b# A$ w- }/ ]
// complicated schedules.# q' h& H4 I& i9 |" ~4 U. S
2 ^5 X) |% w' F! }- q! `# {* f& D modelSchedule = new ScheduleImpl (getZone (), 1);+ z" i: [+ x0 S# w1 T( N& |
modelSchedule.at$createAction (0, modelActions);! z: h9 `1 W; ]- |% R1 C
" j( h1 u8 N2 p, y; Y
return this;
7 S; C; U3 u- P) `9 N } |