HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:( | f( [, s3 X, _" Z
* t5 ~4 `6 l+ X0 P- q/ O public Object buildActions () {4 e, q# D* X5 S# v1 W. P
super.buildActions();
3 `7 U$ U# ?% k" p$ Y6 O7 } u 8 }0 l& Q- `! W# `) h7 u4 ?
// Create the list of simulation actions. We put these in
* W/ A0 Q, [$ h3 ^, s2 Z1 a! J // an action group, because we want these actions to be
$ g9 \2 y/ q0 k } // executed in a specific order, but these steps should# ?: p" S: O+ E1 C7 J2 F
// take no (simulated) time. The M(foo) means "The message
0 b8 f; R! e$ L! b. N' g/ f8 c6 U // called <foo>". You can send a message To a particular
0 h* a* b/ T+ Q) ]' L) ]( e8 D- d# z* o // object, or ForEach object in a collection.6 T ^: X/ J' b! W% R' c+ }+ N
; _6 B! [% v/ u+ E7 e1 ]
// Note we update the heatspace in two phases: first run
% l/ \7 i$ x. {1 A) s* r' ` // diffusion, then run "updateWorld" to actually enact the* ?9 W+ `5 n1 m$ b1 @6 ?
// changes the heatbugs have made. The ordering here is G& S( u! a% \5 p; j3 r
// significant!
! o! v: e5 v' l S0 k/ ]
% }* A& P* B9 s: V7 k3 t // Note also, that with the additional
- S4 t4 Z, O' N9 y // `randomizeHeatbugUpdateOrder' Boolean flag we can' v" A5 s/ g9 `' J4 Q: ?9 Q
// randomize the order in which the bugs actually run
: b( v6 N2 o+ O8 S3 n9 v, r // their step rule. This has the effect of removing any
, O' Y# T: g% F( m; a( N! B // systematic bias in the iteration throught the heatbug
/ @+ D4 w* t, b) Z // list from timestep to timestep
$ S/ D9 i. P# N9 K! b
, Y: J# c8 y) k9 \1 a+ ] // By default, all `createActionForEach' modelActions have. e' m' J# J( A
// a default order of `Sequential', which means that the3 M) a7 h/ |' n
// order of iteration through the `heatbugList' will be
+ m# a+ J7 c* y) | // identical (assuming the list order is not changed
* S' v; d& w- | // indirectly by some other process).
; S# V( c6 {! e" G' \$ _& j; ]
1 K8 G2 K& Q9 A- u; T# E modelActions = new ActionGroupImpl (getZone ());
& D3 U1 M! V& z; A' ?# c* P0 `+ o8 J; t" }7 [
try {8 O9 _) D8 {) e% W$ Q+ G
modelActions.createActionTo$message
4 T G, [6 T: \8 N+ i: | o (heat, new Selector (heat.getClass (), "stepRule", false));
8 h" _% M# O f$ B) j- C/ F- Q } catch (Exception e) {; h& u+ t' B# @9 k
System.err.println ("Exception stepRule: " + e.getMessage ());4 K$ x5 ~8 L$ N2 Y
}! H( h. c+ u. v6 ^: f
- p7 T" y& ]- Y: f) R& E try {( @" o, z. \) ?% j; Q% W5 ]
Heatbug proto = (Heatbug) heatbugList.get (0);( ~7 g2 S( r2 W, L6 m) [7 x5 i4 L
Selector sel = 0 S3 O7 |+ }) o7 a9 M/ L
new Selector (proto.getClass (), "heatbugStep", false);
+ A1 r5 @ X `/ S& J6 n actionForEach =+ G1 v( k) H1 U: w' h
modelActions.createFActionForEachHomogeneous$call
& }/ R; N* q" P K; [0 H% L (heatbugList,) Y* F! j& Z1 h: L1 y
new FCallImpl (this, proto, sel,9 n' |1 k( X! k7 d
new FArgumentsImpl (this, sel)));
' D1 ~3 K/ N ~8 U } catch (Exception e) {
G+ I/ O- ?! c' e. u e.printStackTrace (System.err);
8 {3 I- E# N, c }
7 }7 `; L2 d% I8 e2 c / D/ @- n+ Q$ P$ @7 J% C
syncUpdateOrder ();
- c9 u) ~5 ^: c! \& P7 G
4 Q# q7 m( W, g# p try {
$ F; ^4 L- x, b modelActions.createActionTo$message
8 p% \5 M2 P* H (heat, new Selector (heat.getClass (), "updateLattice", false));
% o3 |6 v$ i8 {4 p% v/ x) X9 g7 D } catch (Exception e) {7 s% ~, v( ?, B$ |+ Y) q
System.err.println("Exception updateLattice: " + e.getMessage ());! v* K4 v4 q3 t
} s4 s8 h- h( @! R
# n. F; u9 W) J. j7 H
// Then we create a schedule that executes the
# E- g5 ~# f7 V* w // modelActions. modelActions is an ActionGroup, by itself it
$ G. S. M. m! U: z4 m6 T* E // has no notion of time. In order to have it executed in
3 ]' n* Z3 E0 |' A // time, we create a Schedule that says to use the
+ |; y" @: {# x3 ]! I7 s // modelActions ActionGroup at particular times. This
, ~2 e, c, N8 \/ r // schedule has a repeat interval of 1, it will loop every% @# }/ g2 y1 L7 T$ V
// time step. The action is executed at time 0 relative to7 \% ^1 [2 T! n8 d
// the beginning of the loop.: V+ {9 Y7 {, c; X6 {
8 B, D' ?+ M k+ d4 e# y/ Z // This is a simple schedule, with only one action that is. O) b1 x/ i. ?: u+ U+ O
// just repeated every time. See jmousetrap for more
4 t! o. P7 D/ B$ [* r3 g% X3 o // complicated schedules.
9 R/ B" w! {* r- b& t3 G
7 M4 s. y# a( ]5 Q modelSchedule = new ScheduleImpl (getZone (), 1);
1 v/ j4 I/ F/ _5 K: c modelSchedule.at$createAction (0, modelActions);
) B! Y, Z w- v @4 s1 Z 2 u9 N8 i* E# c" D
return this;' O& B# p T! T& F' Q
} |