HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
6 I/ k& e* U1 a( V& H* O# r
' D4 h5 U2 Y4 o/ D6 j6 S public Object buildActions () {
: O+ @* u4 L5 |( n8 X5 d super.buildActions();
; X. u+ k6 d! s0 n9 p$ c $ S# E% v' t5 U: Y. J W; x9 v- i
// Create the list of simulation actions. We put these in
" A) P( N0 f% C* y // an action group, because we want these actions to be
6 ?% _) z8 j; i // executed in a specific order, but these steps should4 I# w* R' C- q# @: w$ ^; P
// take no (simulated) time. The M(foo) means "The message" r& ^7 y2 z/ `4 K/ ]
// called <foo>". You can send a message To a particular
8 o" H% q! J" Y0 E // object, or ForEach object in a collection. m5 W2 k! S+ D! v/ G3 E
0 u6 x8 ?* {6 Y0 p& E& J1 t( W
// Note we update the heatspace in two phases: first run6 e" D7 o" z, X% T# X7 Q5 L! t
// diffusion, then run "updateWorld" to actually enact the
: |# ?) A/ h1 T5 y! O. ] // changes the heatbugs have made. The ordering here is
* o9 a$ ^" Q. u0 b* \ // significant!
. U. q" s" V: W3 b0 P
/ L' w3 {7 D P( J$ O( `0 g // Note also, that with the additional X2 a1 {' N6 a, k9 X
// `randomizeHeatbugUpdateOrder' Boolean flag we can
3 ~! z7 I/ `) W7 C; n9 ? // randomize the order in which the bugs actually run* |8 e' e' o) I: }+ u/ _
// their step rule. This has the effect of removing any: W- ~; I* k/ p- j
// systematic bias in the iteration throught the heatbug
& V. Z% w3 f( g // list from timestep to timestep
% L9 G: a: f( p$ @$ @% @$ q# L
0 V% v) z4 r8 M5 W" s, |; m // By default, all `createActionForEach' modelActions have1 e1 W- y& a) h1 u
// a default order of `Sequential', which means that the
0 y0 J ?( \: x5 r4 V // order of iteration through the `heatbugList' will be
$ Y# M+ c6 |' |' X( r6 z1 U // identical (assuming the list order is not changed
0 e5 Y; s/ N: p3 m& S& @$ o // indirectly by some other process).
7 n- H5 [- j0 s. Z4 u , e+ F5 B; X* M. e; @: M
modelActions = new ActionGroupImpl (getZone ());! w$ }* j8 Q% d. S. E& F. n, e
+ e4 H- S! T( }9 A, J try {
8 y2 s4 H" _8 ^+ C& g; x/ f modelActions.createActionTo$message3 W7 p- w3 V: t7 H( m/ U: f- C
(heat, new Selector (heat.getClass (), "stepRule", false));+ u% h; W, L9 G$ w7 J% k5 u% p% c
} catch (Exception e) {
4 [9 z4 z0 v N% E- ?) H System.err.println ("Exception stepRule: " + e.getMessage ());
2 f6 ^$ u+ |9 b$ i5 T6 |% L }
* \6 J& c- s+ z: E+ |3 L$ {4 A5 ]& D$ {) D2 {$ W, C9 e. `; ?
try {
4 G! ~7 @8 K I! ? Heatbug proto = (Heatbug) heatbugList.get (0);
0 y1 X% q3 U. @, [* f0 n5 l Selector sel = 6 ]! X& E* [; Q6 }* \" N' u
new Selector (proto.getClass (), "heatbugStep", false);9 j- }! T9 H5 j; O2 s D7 \
actionForEach =
* [/ J1 O0 R; ]% y, h9 E @ modelActions.createFActionForEachHomogeneous$call
; y8 f( S1 ` h5 `' s. [6 @2 l! K (heatbugList,
9 k- @3 ~( a' M1 Q new FCallImpl (this, proto, sel,9 t; s* D- o }2 i
new FArgumentsImpl (this, sel)));
# w3 B; x& u3 x3 y2 u } catch (Exception e) {
. j# L& c+ u s3 n' j' y2 X! X0 ]+ s/ Z e.printStackTrace (System.err);& M, [7 H. `6 Q
}" t# h7 j; S; J% m) W+ N6 u
1 `/ k0 O6 K, C% {0 q
syncUpdateOrder ();
" c) b2 }3 l/ p) }7 W# j9 L& y' D: R
try {
b3 X2 e' B: L4 { modelActions.createActionTo$message " e- E( O ]8 m( m
(heat, new Selector (heat.getClass (), "updateLattice", false));0 _* a* C0 y1 n- p9 s
} catch (Exception e) {8 K6 s m. A, p f! M9 j/ [
System.err.println("Exception updateLattice: " + e.getMessage ());
' ~& u7 r& L4 w, j! Y }8 P& w; V. m7 ^) A
9 t" H7 j2 n# [! j9 i5 D3 o6 l // Then we create a schedule that executes the! k+ f* A* V! q7 ]. v) J& H
// modelActions. modelActions is an ActionGroup, by itself it
4 L3 n8 ~( [% k. U6 e. D // has no notion of time. In order to have it executed in
+ x8 O$ w' R/ c' | p _) r. Z // time, we create a Schedule that says to use the
4 D7 }' l5 t3 O! X // modelActions ActionGroup at particular times. This
/ g! ~( J! Q0 Q- D // schedule has a repeat interval of 1, it will loop every
`$ [" ?* G, U // time step. The action is executed at time 0 relative to
: H6 d5 G/ s- a0 H/ v* M // the beginning of the loop.0 A. d x% V) v i2 |
# F" L* T! \- G' O
// This is a simple schedule, with only one action that is* E; P, D1 r& Q) u- T2 V+ I
// just repeated every time. See jmousetrap for more
8 o1 I' w# [; K3 t! b$ w2 @2 `, Q // complicated schedules.$ N4 u' H: M6 S* y# Y
: e% |1 U) n+ C( l( T
modelSchedule = new ScheduleImpl (getZone (), 1);
1 g, N* ^& A* j4 d modelSchedule.at$createAction (0, modelActions);7 v! K$ a b% m1 Q( i) L" c( P! Y
% }) R- K; w# S3 ]6 f9 A, H
return this;
% \- c% o6 O( d/ r4 ] } |