HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:% m$ E o4 K" H7 \. N; m( k
, |, X! H X: o2 L# i public Object buildActions () {
1 J0 g7 v! d) h9 X3 U super.buildActions();
+ t2 b" S3 l( S4 }# Z9 B 0 u7 a) b1 B2 M# X7 Y
// Create the list of simulation actions. We put these in
- y$ S7 l3 C, A: w // an action group, because we want these actions to be$ ~* d3 K+ P' B9 H
// executed in a specific order, but these steps should$ j) D) x" N! `1 ^ l
// take no (simulated) time. The M(foo) means "The message
, @# `" t4 t" }! p& i // called <foo>". You can send a message To a particular
1 ^. q1 E2 X$ u& `8 A( J6 W // object, or ForEach object in a collection.
, Q* ^( s6 V) O1 \
. D& V: N2 E- N* c$ |5 K9 \ // Note we update the heatspace in two phases: first run8 o4 R* T& Q0 g: o1 h
// diffusion, then run "updateWorld" to actually enact the( w6 s" O2 I ~" L
// changes the heatbugs have made. The ordering here is1 r$ A2 s+ W# v+ s! z
// significant!+ {7 M' N/ V* Q
" M9 H1 \! {/ | \/ H7 r // Note also, that with the additional
) }% S3 J" w2 t // `randomizeHeatbugUpdateOrder' Boolean flag we can
3 j0 m6 L7 z; S7 F( V // randomize the order in which the bugs actually run
, o/ w" ]6 Y7 M0 Q1 k* s- v // their step rule. This has the effect of removing any
i1 X/ n( {6 O3 o // systematic bias in the iteration throught the heatbug/ p2 \" |; i7 n" \
// list from timestep to timestep
/ I4 T0 \# x8 z: l! m. N/ e$ y
( t7 b/ _( D' ]! I3 r# r2 q // By default, all `createActionForEach' modelActions have0 R/ U/ X: I" R
// a default order of `Sequential', which means that the
- |1 M$ G; K, b( E. | // order of iteration through the `heatbugList' will be& o8 o+ g+ y, f- c5 ^
// identical (assuming the list order is not changed- X6 k/ [3 a, v" @ n$ A
// indirectly by some other process).
, w& c& o2 P; Z( }0 o. U
) [+ O& a1 l/ C4 s. m( o h modelActions = new ActionGroupImpl (getZone ());( b$ _8 e. l% z0 w
2 }: Q9 P8 }, w6 e/ r+ f( _ try {6 Y+ n2 V4 j2 O) }$ q3 O) z
modelActions.createActionTo$message( ~2 b$ |' V% z: P2 v
(heat, new Selector (heat.getClass (), "stepRule", false));
3 [" \: ]" X5 J. T; C* F, ? } catch (Exception e) {
. }3 E9 S- l5 O+ v4 M- w7 O System.err.println ("Exception stepRule: " + e.getMessage ());
7 J% m, Z. }6 i$ h }
+ c/ U1 i2 M. T8 t4 U6 e ]! H9 z* W. w1 ?; t3 {4 v/ S! t4 ?1 D
try {
+ ~& K& w) X) r) k4 V Heatbug proto = (Heatbug) heatbugList.get (0);# I6 Z0 M) Y- J* h8 u# s
Selector sel =
# ?2 }/ B6 e) y3 Z# ^$ l/ S new Selector (proto.getClass (), "heatbugStep", false);
r. G' P4 i7 v, V5 I: Y: K actionForEach =9 G. z. Q( Q7 s( G4 Z; y
modelActions.createFActionForEachHomogeneous$call- i3 d9 v3 H5 U7 r; C# D4 m; P
(heatbugList,0 ?* N# N' Q" s
new FCallImpl (this, proto, sel,
9 Y' H8 C9 X, @6 H+ s5 h! v new FArgumentsImpl (this, sel)));* f7 J b: P% C# n# q1 R4 s
} catch (Exception e) {
7 |8 I& @+ o% k( u e.printStackTrace (System.err);3 m/ S- _$ g- `
}
. j* g9 B) U4 O, t B6 r
9 f" G) E, D4 H( z syncUpdateOrder ();7 [8 O8 d* F% w! A/ Y
5 v2 A% E1 |% t( b6 \
try {# s8 \# k- l4 { c( I: d
modelActions.createActionTo$message
* D2 B% w4 @ e5 s5 w) F/ S (heat, new Selector (heat.getClass (), "updateLattice", false));
$ h1 g0 y' w' ]( f9 I1 P } catch (Exception e) {
0 A- o5 W$ V3 V4 P- U System.err.println("Exception updateLattice: " + e.getMessage ());5 Q+ I2 j2 E) K j% U
}
6 Y0 o5 d {, R: P; g& e, G5 u , y9 D& k& \; F* P3 W: A
// Then we create a schedule that executes the
2 n3 y% u8 a/ l! k5 } // modelActions. modelActions is an ActionGroup, by itself it
( d5 y/ n( R9 h+ v! [3 R0 A // has no notion of time. In order to have it executed in' d7 }; O+ ?, r* I" R- Q
// time, we create a Schedule that says to use the! F! q9 @2 t& e( [' k
// modelActions ActionGroup at particular times. This
$ w) s- R* q, S( R6 J! b // schedule has a repeat interval of 1, it will loop every
7 d& v- z; s* E# d. v2 j- }! U6 a // time step. The action is executed at time 0 relative to! r8 I" ^: u: Z2 d
// the beginning of the loop.% A" A% v2 R( d* x+ G: N2 ~
^& a; k. U; e" O1 [# Q
// This is a simple schedule, with only one action that is
1 o+ n# O8 N b+ U% m // just repeated every time. See jmousetrap for more+ I, s3 U: J2 m: f7 _. T
// complicated schedules.. W2 ?- \/ j4 }1 U
* H/ D1 h8 Z/ } modelSchedule = new ScheduleImpl (getZone (), 1);
, L6 ]% s; N" F9 g& q! ~4 r modelSchedule.at$createAction (0, modelActions);
3 k4 Y% t/ a* _& [ ' R/ j* b$ U- }. r0 }+ J1 m
return this; X1 j- a1 G* W7 _; m
} |