HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
7 Q, X6 Y+ L e7 V% Z! _/ t' S4 _1 K8 m* D9 r5 e# L$ p
public Object buildActions () {
[' L( `3 B- F& z8 N7 A super.buildActions();" L7 X. \1 h; I- C1 j' \
) _5 I- r# {' B4 w' s, ?- {
// Create the list of simulation actions. We put these in: }; f- T2 o# S) j& q
// an action group, because we want these actions to be
$ ^9 V" O' y- q! h // executed in a specific order, but these steps should( j! n$ B+ r* J9 X( s
// take no (simulated) time. The M(foo) means "The message
; K5 w" Q5 Q: _* ]: Z0 j // called <foo>". You can send a message To a particular
3 i& c- D% r/ u4 Z p$ B( u // object, or ForEach object in a collection.! K s: r; g7 V+ R/ G% S
4 K- V1 Y" `& e, y
// Note we update the heatspace in two phases: first run- W5 | R$ ^6 \& e8 r8 F. k0 |
// diffusion, then run "updateWorld" to actually enact the. W% G7 Q4 m, B( p p
// changes the heatbugs have made. The ordering here is; _, a# b6 V. g( V$ ]. C3 [( d
// significant!
0 i+ g; i( j3 i, | " d9 v: k/ l" ]8 D. f
// Note also, that with the additional
. Z! X3 X: Q* K( S* [; q // `randomizeHeatbugUpdateOrder' Boolean flag we can6 W0 m ~; _$ B5 { r$ e% _
// randomize the order in which the bugs actually run- r0 j! a# Y$ Z+ |# Q
// their step rule. This has the effect of removing any0 s- @0 G; F' W) ^! D0 q# O! ^4 L$ Y
// systematic bias in the iteration throught the heatbug+ ?! G& \6 ~ O9 j! u; H7 U2 `" Y
// list from timestep to timestep; [5 @) ~9 v/ B
) m( w, j; d0 S2 M! N6 [" Q // By default, all `createActionForEach' modelActions have
; [# O$ r/ P% q& B( } // a default order of `Sequential', which means that the/ b5 \; }; k! F6 J9 q3 O5 W' Y; s
// order of iteration through the `heatbugList' will be: z5 [& t- Q. r, ?; S
// identical (assuming the list order is not changed
/ o2 B: K' z% B' R5 g' E2 A4 X2 Q // indirectly by some other process).
% T3 Z5 ]' T! M, d
4 N2 e- m: ~( k1 |- L; C modelActions = new ActionGroupImpl (getZone ());5 d% Q: K5 E4 u1 R
. a# |2 x- V+ S# i
try {- O4 w& w1 k$ Q( G# w
modelActions.createActionTo$message/ V$ O% j# s" |: g. R+ o
(heat, new Selector (heat.getClass (), "stepRule", false));6 |& z0 r( W* R* j) T( }3 j
} catch (Exception e) {
& T4 Q: M/ N6 W7 `9 o System.err.println ("Exception stepRule: " + e.getMessage ());* m/ X; e4 S) {( u) t1 M
}! C, w4 a8 i' h+ Z! x1 [
) T+ P" S9 i# P, y% _8 E! n
try {. P: f9 @% H- a+ k
Heatbug proto = (Heatbug) heatbugList.get (0);, T7 G' ], b% a4 k, j
Selector sel =
0 j6 K3 l3 j8 [+ D5 r' P9 v [) I new Selector (proto.getClass (), "heatbugStep", false);
2 M5 p' ^6 y1 x% o; d actionForEach = Y( Z( B# V+ D R
modelActions.createFActionForEachHomogeneous$call- x; }% s# M3 J) R* F C- \
(heatbugList,
# i) Z0 g% O, q- Q new FCallImpl (this, proto, sel,) A- p& y% H; k @5 V# o
new FArgumentsImpl (this, sel)));
& e( L# m; D6 x, R5 h } catch (Exception e) {( ]. g9 A+ v) h. F0 j- }) Z3 n
e.printStackTrace (System.err);
4 |1 T/ L; W4 `, J. A }
. {+ F, ]" a7 s6 N* ~ 1 h$ ^* F/ D3 z/ ~% j0 b
syncUpdateOrder ();: ~/ U- i+ b. O; M5 C
. r7 h" D4 m8 }! s" D7 R
try {
4 ?1 t. F. T) ]" @$ ~2 a" I modelActions.createActionTo$message / q2 h' m& n8 u8 K
(heat, new Selector (heat.getClass (), "updateLattice", false));' T2 z {4 |/ [" y1 X. K
} catch (Exception e) {% ^+ U4 f) @0 p2 M& E
System.err.println("Exception updateLattice: " + e.getMessage ());+ n1 H H. f" B! \0 k9 l- }) k, H
}9 z5 M4 W& {# W" d4 t. b) r" k
5 E# e% m0 I) o3 V Q" i& o" i
// Then we create a schedule that executes the" P* U v' \4 }- ]
// modelActions. modelActions is an ActionGroup, by itself it. b- S1 G* l7 H9 r; y9 [
// has no notion of time. In order to have it executed in a6 { l! w1 c$ {* H/ w
// time, we create a Schedule that says to use the' s5 \; [( t# P$ e! S, p+ g# j; w
// modelActions ActionGroup at particular times. This- ^) b' f$ ^4 ~& I
// schedule has a repeat interval of 1, it will loop every5 |4 A: Y& T. t. V
// time step. The action is executed at time 0 relative to$ c; t, ~# j" o: F
// the beginning of the loop.
) R3 h) w- W3 V" D; d# |. e7 W* `6 k% U2 Q
// This is a simple schedule, with only one action that is
( S7 Z( E5 E& y7 x5 } // just repeated every time. See jmousetrap for more
& z' E6 q9 M3 V8 O! ? // complicated schedules.
" Q$ {. `" y' y9 c# t % w4 p" { D$ P+ l; f, e5 `( P
modelSchedule = new ScheduleImpl (getZone (), 1);+ B2 f, Y, v% D% X J# k( `
modelSchedule.at$createAction (0, modelActions);
- D0 l7 E9 V$ V4 C- I - A7 ?, X) o3 B0 c$ o! x; w! Y$ Z
return this;
4 n- r5 x4 F/ V! d } |