HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
( b9 e$ d; O0 j( I7 P7 y7 J$ @: B5 h4 d7 y8 f( `
public Object buildActions () {
. x* r2 T( X3 I; Z8 l super.buildActions();6 r( I7 P* ^8 d# G7 J+ N1 U# V8 w
4 P; K4 z' `3 p) w
// Create the list of simulation actions. We put these in1 w6 ~) z8 @3 B4 H& Z
// an action group, because we want these actions to be
6 N5 d. C8 I4 ?. o* t( Z // executed in a specific order, but these steps should2 A7 S, l$ s1 P! f
// take no (simulated) time. The M(foo) means "The message
) s/ n" d& i" k5 j& u // called <foo>". You can send a message To a particular8 p5 R2 Q& \6 N' R+ @5 ^& Y f+ W
// object, or ForEach object in a collection.& |* X2 d, n3 m& y
" h$ C2 D8 L" m% l5 N // Note we update the heatspace in two phases: first run
( E9 z5 `2 c' t8 `8 _ // diffusion, then run "updateWorld" to actually enact the. b+ S" Z* K, F: y6 S
// changes the heatbugs have made. The ordering here is0 |% b. I" \) N
// significant!
9 R. J! r# r. U) u" X- X' j ( }4 ?" U( ?. U+ l3 \
// Note also, that with the additional
% R$ e P# ?3 z: D2 y) ^3 x // `randomizeHeatbugUpdateOrder' Boolean flag we can
4 g# c1 a$ Q0 | \# {/ F // randomize the order in which the bugs actually run
, t) c3 t3 d9 F7 H$ a // their step rule. This has the effect of removing any- c: M2 R1 I! {# V7 d
// systematic bias in the iteration throught the heatbug. m- H* n! v8 q3 |% `
// list from timestep to timestep
9 C H% y6 [2 u( q2 K5 T$ M" V 8 ?! t% ?- a: u. {; Y1 ~5 m4 A) c
// By default, all `createActionForEach' modelActions have
% P/ T- P7 E: o6 y0 u // a default order of `Sequential', which means that the/ D- ` T2 e! r% D/ D
// order of iteration through the `heatbugList' will be7 r2 m/ G; e( ?
// identical (assuming the list order is not changed0 i; E3 Q2 w9 _& o/ u( N3 K% s& T- r
// indirectly by some other process).
}9 p& N( Y; @/ a4 | A
8 r/ x: l, c6 Q% U modelActions = new ActionGroupImpl (getZone ());
& C. A- m2 C4 L( P
# |+ I; s; w2 |6 H. i try {& r" E" K$ F- y2 y: k5 }- Q
modelActions.createActionTo$message
' V+ w3 E, c2 ~2 e |9 k6 [$ J0 Y (heat, new Selector (heat.getClass (), "stepRule", false));. G1 n. E4 |8 I
} catch (Exception e) {
2 r* _; i% b8 X, [% X System.err.println ("Exception stepRule: " + e.getMessage ());
7 D4 H, K! q; Q3 }; p }
, [: r' Z3 [/ o9 L& o( `: s8 J- C( L
try {
" ?+ [% L2 X& p% l3 K U% u Heatbug proto = (Heatbug) heatbugList.get (0);
5 b, z! B5 j' _ ?5 _. S Selector sel =
% d" k" N, \$ g m+ [) ] new Selector (proto.getClass (), "heatbugStep", false); n/ v; y! a2 U
actionForEach =
]; | l4 q) } modelActions.createFActionForEachHomogeneous$call
3 ^( |, f8 X& I2 x* o2 X/ m (heatbugList,
- z, q% B8 }' v& W! R+ b& O new FCallImpl (this, proto, sel,: D! O3 l8 N; H) g
new FArgumentsImpl (this, sel)));
1 z! x* A2 _/ v L$ g$ x7 t: ?4 x } catch (Exception e) {+ o1 A' h" n' y; D6 q5 @
e.printStackTrace (System.err);4 ?4 Y, w# t- J2 c) T) D
}
& W) ~, E1 W8 e( b' k# N % q* s* y! D) u7 P1 Y& V
syncUpdateOrder ();
0 e& b( o0 y# x: F& s
& z) r+ f/ T, c6 z0 O try {2 {, {: [0 I/ S {8 t- U0 E
modelActions.createActionTo$message
8 ~; G9 Q0 R0 Z9 F$ W8 p3 }1 _ (heat, new Selector (heat.getClass (), "updateLattice", false));9 a) _9 A3 f- H
} catch (Exception e) {2 d" I/ J/ U) p, I/ f% C
System.err.println("Exception updateLattice: " + e.getMessage ());3 E. c+ E* w' A4 l
}
- x" i& q& }' t7 o1 Z6 P* v; Z" V5 z ) B8 ^/ i+ y2 a3 ^; ~
// Then we create a schedule that executes the
& T, W+ V, s8 I M& q* q' W // modelActions. modelActions is an ActionGroup, by itself it
& {, i% c3 |+ T // has no notion of time. In order to have it executed in
4 t7 _. J. t( u0 Q. t // time, we create a Schedule that says to use the7 [/ I0 ?2 z' [$ q5 z
// modelActions ActionGroup at particular times. This
3 x, w# L, {) Z. E+ {; j // schedule has a repeat interval of 1, it will loop every7 o# R6 n% j, E- N
// time step. The action is executed at time 0 relative to
6 M' t% j& L0 X( S0 |+ {2 r( z // the beginning of the loop.
% L- o/ H3 X: d/ }. s$ A7 P8 Y( G, a V3 C
// This is a simple schedule, with only one action that is
& D( _# L( n6 ^ // just repeated every time. See jmousetrap for more c4 e7 v) @* a4 @. G" k8 |4 U
// complicated schedules.' {' T- j& x1 X( {
# R, T6 b5 Z6 h& W1 E modelSchedule = new ScheduleImpl (getZone (), 1);
* m& W) X/ A A modelSchedule.at$createAction (0, modelActions);- g9 P2 `. T& y7 M" A) [8 y J0 \
5 n7 K: W, {5 W# g return this;. q( o1 R9 l9 b
} |