HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:& W9 l. _# ^5 _8 L. ]5 Q
$ V9 z: b9 L1 n+ Y$ z( f6 b$ Y public Object buildActions () {
6 A( k3 D, o8 T* @0 A5 c" j super.buildActions();. A1 I; [3 R7 j# H, n5 b
% J( w( a7 y2 x
// Create the list of simulation actions. We put these in
" g+ k# _- l; Q0 B // an action group, because we want these actions to be
, N! Y Y$ n# C+ ~ // executed in a specific order, but these steps should
; H3 ]3 n l4 Z) r // take no (simulated) time. The M(foo) means "The message' a1 i1 o, z2 Y3 ~$ Z: T
// called <foo>". You can send a message To a particular
+ g7 y7 A: Q9 s/ w! f5 I // object, or ForEach object in a collection.
( N9 e s$ g3 E : I: t# c# j7 O9 }6 E
// Note we update the heatspace in two phases: first run
% Q& {/ @8 p: v( s // diffusion, then run "updateWorld" to actually enact the
1 T5 s7 O; s, S$ J! W: V2 G- H // changes the heatbugs have made. The ordering here is
2 E# t Q' _' g/ P) R2 } // significant!
5 m8 J, T l* q8 r% o
7 Z7 f" E" ^% R I% h& h% b* N // Note also, that with the additional& ^* o2 Y* @; y+ U. {5 p
// `randomizeHeatbugUpdateOrder' Boolean flag we can, J( }( i" s( C* D: w1 h
// randomize the order in which the bugs actually run# k' ?% s$ {* P8 `+ u$ N# _6 E
// their step rule. This has the effect of removing any( L: ^, |0 u5 ?/ P9 ~! h
// systematic bias in the iteration throught the heatbug
% Y. \4 X; k1 A; D // list from timestep to timestep( F! `0 D" x% G8 _. I% p7 U8 O
2 l) S: t0 J2 L& x4 A8 l/ u8 I
// By default, all `createActionForEach' modelActions have; X2 O$ ^( R8 m' Z$ x7 F( Q0 h
// a default order of `Sequential', which means that the9 H# V/ c( @. q+ O& V
// order of iteration through the `heatbugList' will be
/ p# h9 J& B! |$ ]* Y9 Q // identical (assuming the list order is not changed
: u( f: V1 T1 L5 C m+ k) G6 l5 J // indirectly by some other process).8 N+ ?1 \( R( ?* a3 f. C7 M$ P
) D2 C7 Z# {' ]. f modelActions = new ActionGroupImpl (getZone ());9 @5 B ^) v7 l# q' [4 }4 k2 f' s( I
. B1 E* Y ~: t q try {
j! V- y& [- e modelActions.createActionTo$message
1 m) z7 b& c2 } X) g8 s" T (heat, new Selector (heat.getClass (), "stepRule", false));
0 M" z% I" ]- x1 y9 M* X } catch (Exception e) {
' j( D& ]: ? z$ V+ G System.err.println ("Exception stepRule: " + e.getMessage ());
: N* b) h) v2 c+ \) i/ j, Z9 l }
5 Z- Z& ]) ~4 D! Z! d4 o) n, e. {) k
try {$ z: c; ?1 P* J
Heatbug proto = (Heatbug) heatbugList.get (0);
6 L( I+ |" n! F+ n% L Selector sel = , s! A* M; _+ p
new Selector (proto.getClass (), "heatbugStep", false);
& R' n2 |& W9 s, a/ C actionForEach =% d7 O) G; [, b o% e2 L
modelActions.createFActionForEachHomogeneous$call
0 c$ t' ]2 P5 j/ H7 L (heatbugList,+ R9 J! b$ @3 U+ E* \$ O0 y
new FCallImpl (this, proto, sel,. E( z5 i+ b: @6 O- R: [$ H
new FArgumentsImpl (this, sel)));2 z1 ] F5 X$ T9 D1 q5 \( U
} catch (Exception e) {7 W% [" j. c7 z4 \, t0 s/ S; x
e.printStackTrace (System.err);" {6 A9 e [# `1 H
}
* x# x" n7 X9 q% n& b' e5 l% C9 h
; K2 L/ K0 }) k/ H syncUpdateOrder ();; j2 r2 |7 B* g |3 z
* F9 V. t# J4 [3 N0 s try {" t; W# z) Y+ L9 E5 I2 N S- k0 ]
modelActions.createActionTo$message
* ? I& g7 o6 w; t j (heat, new Selector (heat.getClass (), "updateLattice", false));
; v; c" @" G' t; i' c } catch (Exception e) {
1 O9 O/ L4 _8 ^6 t% K3 ] r5 m& ? System.err.println("Exception updateLattice: " + e.getMessage ());
) u5 p3 k# F# @/ V! @0 _1 t7 m: P1 O }( u# o# z$ ?+ N1 r# R* x+ q
- P* A9 S6 W. V, ^; x
// Then we create a schedule that executes the
q }$ I7 L; l/ H // modelActions. modelActions is an ActionGroup, by itself it
7 U$ U$ {% ~9 J9 E // has no notion of time. In order to have it executed in X9 z1 G4 j; R) f% Z/ I+ f4 |
// time, we create a Schedule that says to use the
1 a) N8 p# }! v9 G // modelActions ActionGroup at particular times. This/ l( x( e( |* _7 N& {
// schedule has a repeat interval of 1, it will loop every' s- D, \- `, ]) z% |% H
// time step. The action is executed at time 0 relative to# z+ i" i! u4 V) B# ^2 J+ r
// the beginning of the loop.
! r# ~8 }8 @) [2 J0 g0 d/ b- t- M, r7 i$ j
// This is a simple schedule, with only one action that is
9 x+ v" _- u/ F) O- m0 b9 B // just repeated every time. See jmousetrap for more
$ g+ ?8 {( F, _1 H% m$ f // complicated schedules., d$ q+ B- Y0 r5 n; X( B4 k& L
4 D' d) X( o* z' {$ u/ t modelSchedule = new ScheduleImpl (getZone (), 1);
; p( Q* d$ Y3 j, c modelSchedule.at$createAction (0, modelActions);1 K/ y1 [2 a) ^- |8 u+ t" l# h! O
2 W B5 X- a& ?0 z& S. f2 u
return this;; y& t; B3 ^/ H' J/ U5 N# ^
} |