HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
. B$ n' h# r: `# p" i) C4 N1 |1 M( |- k
public Object buildActions () {
$ X2 q! |8 j* S+ v super.buildActions();
. o6 n1 M$ K& j
' a; X+ l" U; r3 ~ // Create the list of simulation actions. We put these in
+ ^) r3 ?5 Q) g% d) W+ J# ?2 Z // an action group, because we want these actions to be: f" z5 D# a+ y; W/ z
// executed in a specific order, but these steps should" V/ E% k1 D, K. C. v. J
// take no (simulated) time. The M(foo) means "The message1 W `' }% `, o% a% ]
// called <foo>". You can send a message To a particular
$ \+ |" G8 m; w, u; Z2 l }) d5 K3 A // object, or ForEach object in a collection.; D+ R8 Z" n$ k {9 O- e8 r
* M* y) p) e; \; F0 p, V0 w // Note we update the heatspace in two phases: first run7 y" j5 C4 y8 r. L
// diffusion, then run "updateWorld" to actually enact the& g& J( f$ Y% x0 i& D1 f
// changes the heatbugs have made. The ordering here is
6 ]( i, b! n$ m M( D) v/ V: p7 I // significant!- E& n8 G4 y+ f% A* l' I0 A
( o9 h' `+ C* N" X4 o& O$ m9 L: }9 B
// Note also, that with the additional
4 S- w$ X2 V6 ^2 Q // `randomizeHeatbugUpdateOrder' Boolean flag we can
, Z' B {. p" A6 S6 M& z2 Y // randomize the order in which the bugs actually run7 g& S" Z" s: Q; I$ R6 H6 E$ {
// their step rule. This has the effect of removing any
1 X4 C: U3 R# g! X; w7 V // systematic bias in the iteration throught the heatbug; Z4 X: y' ^4 D, C3 t+ J' c
// list from timestep to timestep9 q. z. K I8 f2 e q, t( k
1 V% o: n3 a( {" H* W // By default, all `createActionForEach' modelActions have& E6 e. X" `# A4 q6 t
// a default order of `Sequential', which means that the
/ {: d# p. I, U7 ?. c+ N6 ?( o // order of iteration through the `heatbugList' will be
( ~* U, u! g2 o, W // identical (assuming the list order is not changed
& z( |9 V1 I, V; w7 i+ Q. O6 X* O // indirectly by some other process).
; {* S& z, o0 `
7 g: P+ F3 G$ m- x; ^0 k% _ modelActions = new ActionGroupImpl (getZone ());# K2 h+ H1 a; x0 W3 D6 Z w
: e7 ` \/ d/ D# J7 u5 P+ E( X try {
G4 n+ z% ^2 a+ k$ e* ` modelActions.createActionTo$message
# m, C) q3 y; D7 [" [% J. w (heat, new Selector (heat.getClass (), "stepRule", false));
# k8 S) M# H! l8 z3 r/ O } catch (Exception e) {/ L# K3 q- N: l& r' v# A) K
System.err.println ("Exception stepRule: " + e.getMessage ());
/ g; k5 ^; s. h( c% s }
& p' S5 l" s( I7 q3 P1 ^
, K O y9 q! u( w- n" E% x" O try {' G/ I8 g$ y* w
Heatbug proto = (Heatbug) heatbugList.get (0);& g' D; O* Y5 X* N& R% |
Selector sel = 4 {$ H8 c/ W/ }0 l
new Selector (proto.getClass (), "heatbugStep", false); K) y% _8 ^7 K+ `$ F L" z
actionForEach =5 W7 v: P/ N% O( v
modelActions.createFActionForEachHomogeneous$call: ~% T9 O2 d8 B! T
(heatbugList,0 `7 M* P) N( M# @
new FCallImpl (this, proto, sel,
3 g, R4 U0 U4 q new FArgumentsImpl (this, sel)));
' U/ P$ M: ]( |2 O' Q8 X } catch (Exception e) {
4 i* K, y% T# O1 c- d. R! C* C e.printStackTrace (System.err);) K8 `8 I, U4 y% W
}! V' l0 j: B' `6 f
) Q$ k9 l/ k. L/ g; z% L: D: ` syncUpdateOrder ();& r( Y- t1 Y; ]2 D6 k, I
1 k$ `/ h. w: ]- G7 \- @. X
try {
) s+ W" H8 j4 K, v" P7 | modelActions.createActionTo$message
0 ], D: r% T" }' s5 y (heat, new Selector (heat.getClass (), "updateLattice", false));
2 V) B7 k6 Y, a } catch (Exception e) {
N2 S9 n- K7 u2 c+ z$ e System.err.println("Exception updateLattice: " + e.getMessage ());, q8 c1 W2 u( W I
}
+ y4 Z8 K) U( g: G! j4 c6 z
. l) G! y1 d7 c0 O9 `: D! ~( f // Then we create a schedule that executes the. w' F" H% @/ W7 ?! t5 G
// modelActions. modelActions is an ActionGroup, by itself it
2 R! v8 _/ o$ r* @) t$ A/ s, b7 O // has no notion of time. In order to have it executed in
: B2 G& g! I: a& n5 o+ J // time, we create a Schedule that says to use the
. L- t, d+ y' J, W& N& o9 X& a // modelActions ActionGroup at particular times. This7 b+ Y, v7 s! q7 f$ u
// schedule has a repeat interval of 1, it will loop every+ r) a! t" A6 d7 i [$ u3 M2 z
// time step. The action is executed at time 0 relative to4 s) Q3 M; |% g0 C+ y
// the beginning of the loop.
2 |/ l7 B. l0 z' ?
8 b6 F4 L( M0 @& w: U0 c" Y // This is a simple schedule, with only one action that is. \- K. M8 V# H
// just repeated every time. See jmousetrap for more/ F m5 d, d- \& X$ ?" B
// complicated schedules.$ s6 `$ o+ e3 e* @) ^, d
7 [& V# R/ A ?/ H
modelSchedule = new ScheduleImpl (getZone (), 1);
) j6 t: H2 }) m( Z. L* z modelSchedule.at$createAction (0, modelActions);; j, r: z+ _5 ]- {% F6 k# a
" c/ S: F/ G- e( n return this;6 d1 p8 s! l7 A6 K& ~9 {% T
} |