HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:$ i, V% \0 q, a; n% F
' {/ [) C2 _: H
public Object buildActions () {& ~( x( I+ m9 B8 G3 [3 s
super.buildActions();) B: Z, P& t% o! e c. y) u
4 Y3 f" y2 V2 a. e1 Q' N! a // Create the list of simulation actions. We put these in; s! B2 G( S, N6 u* h
// an action group, because we want these actions to be2 ]5 _' d( g" |! ^: M" t
// executed in a specific order, but these steps should
# h4 z$ T- ?4 l1 i // take no (simulated) time. The M(foo) means "The message
8 \4 Z" F# F; r2 t% K // called <foo>". You can send a message To a particular
0 `) T: V M1 a7 i // object, or ForEach object in a collection.
' R2 k2 B0 p* Y& P
8 K4 E2 h* K2 e+ Z5 Z1 y6 } // Note we update the heatspace in two phases: first run
3 A f/ E3 p1 |1 ?7 }& w9 Y // diffusion, then run "updateWorld" to actually enact the: V, V' X' _7 N+ n; L
// changes the heatbugs have made. The ordering here is
{9 v/ i3 w7 N6 N5 B // significant!
5 x, {& U$ N0 F; t; n' d1 _ ( N1 Q3 n# ~6 j! O+ ]; |# P
// Note also, that with the additional
) A8 W5 E3 }$ E% L9 O // `randomizeHeatbugUpdateOrder' Boolean flag we can
5 d. p. k% @% O6 x2 d // randomize the order in which the bugs actually run
; G: o) L: ^) k6 U5 V7 }8 V // their step rule. This has the effect of removing any
/ N1 f( v+ ]2 y; Q& v4 m* r // systematic bias in the iteration throught the heatbug( ~% t. x, n- C u- _9 J5 u
// list from timestep to timestep) r2 o3 \" L' X p" C) k6 p! ^3 Z
+ u5 t* i/ F& ]; o6 |, c& ]& w- N // By default, all `createActionForEach' modelActions have
* M7 m4 A: R7 u; F# }' T ^# _' P5 ~ // a default order of `Sequential', which means that the/ ~1 J2 ~2 S# C) G1 Q) Q2 O+ @4 I. k
// order of iteration through the `heatbugList' will be
5 _6 n* d2 m9 O4 Q // identical (assuming the list order is not changed6 S6 f- H/ |% t, l& r: x/ E
// indirectly by some other process).
% ^- Z; r% S# h4 R1 V( W4 c$ v+ ] % l( j0 l( ]. u4 y9 i/ F3 j' e
modelActions = new ActionGroupImpl (getZone ());! w, L- |" S1 A9 I A9 \/ e' e% N
1 x5 m; B3 \( |/ Y% y; v try {2 Y& H* O' b& V4 S+ ` f% i
modelActions.createActionTo$message( q; k; q, E' y( @% S0 ^5 F
(heat, new Selector (heat.getClass (), "stepRule", false));8 ~0 n) ]( L- m7 Q( I$ a" t, n2 |3 |
} catch (Exception e) {
( z( s4 X4 p- Q& l. | System.err.println ("Exception stepRule: " + e.getMessage ());
2 m8 F/ t& N- d& a }, _5 O2 L7 `+ q, \" g# P$ G: r
! j- T. c/ v) `; t try {
' r* ?/ `' v9 H4 q: o8 w$ u Heatbug proto = (Heatbug) heatbugList.get (0);0 v* W, W1 N: S5 G( l/ S
Selector sel =
0 s: q- }3 d1 s2 l0 Y" X new Selector (proto.getClass (), "heatbugStep", false);" w2 X: z1 T& e' u: c
actionForEach =& ?- j# z G$ y* |8 J
modelActions.createFActionForEachHomogeneous$call9 f7 R) N9 B; I- a
(heatbugList,
9 N e' h1 `! ?/ ]1 p6 a3 ~7 L- ~ new FCallImpl (this, proto, sel,
( H; D& I# F7 [4 s& l2 G( X: C new FArgumentsImpl (this, sel)));* C% @! }& U( h" C% y" \
} catch (Exception e) {0 S1 g/ y4 H2 ]' m P
e.printStackTrace (System.err);
2 c, g0 m% j" e }
9 T2 R' |! h% [2 F2 \! h4 p
% _% U+ \: C' `( c- _ syncUpdateOrder ();
6 r/ ^: {' C7 S) `! o Q9 V! a, C1 H# J/ C, g
try {& j- w/ D' ^* k6 O
modelActions.createActionTo$message ; i) e! Y: l: q; J2 v9 q& S" N
(heat, new Selector (heat.getClass (), "updateLattice", false));- r8 j) j( {- D6 @2 b" F7 W, f
} catch (Exception e) {
" D3 e- u. {) X! {: ?8 y* Q4 P System.err.println("Exception updateLattice: " + e.getMessage ());& v, q7 E6 f! `7 k; `; [% u* m4 q1 {
}
1 c) E* H y0 q) N! n+ b
& k. v& {+ M1 G // Then we create a schedule that executes the
: @3 K4 {0 e- D' ^2 V y // modelActions. modelActions is an ActionGroup, by itself it
; _) E( `: S; {; @' q // has no notion of time. In order to have it executed in
. {) A5 A: ?2 ~- ^7 m // time, we create a Schedule that says to use the
- J* Q* }" z5 u4 L+ n! ? // modelActions ActionGroup at particular times. This
w/ Q+ \0 P/ y+ T1 a% m! S( a // schedule has a repeat interval of 1, it will loop every0 s& b# ^7 Z: i" Y1 U' a4 ^
// time step. The action is executed at time 0 relative to
. P6 P7 R) ~4 m8 e" v // the beginning of the loop.
' A+ P- y- q8 x( W' k$ T4 f0 o1 E
// This is a simple schedule, with only one action that is+ n: |# i8 W) H k
// just repeated every time. See jmousetrap for more2 O! R- n" W2 J8 a& ? F1 S
// complicated schedules.
/ M! e' ?0 [* S- o; h9 H$ C 6 ]% ?! Z) e+ U$ N# d* p
modelSchedule = new ScheduleImpl (getZone (), 1);4 S* r, x; y, Z L* m
modelSchedule.at$createAction (0, modelActions);; n; g* v. o6 A4 V4 v* `5 }
9 Y: W% m1 E1 W return this;
- ], z( n+ U( O, u } |