HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
/ a, }9 k+ R6 n
- N/ w6 t2 ^" k- ]$ h* m# | public Object buildActions () {7 F; T- t4 M+ F+ k( b
super.buildActions();+ F6 S- x* @% _. w: w: J" ]
9 h% ^1 z- A [/ x1 S9 w
// Create the list of simulation actions. We put these in
* l6 J( F/ Q- A s Y( N // an action group, because we want these actions to be
; @ \% b( N. R3 a // executed in a specific order, but these steps should
|8 U2 ^. j$ ]* @' |0 n5 B // take no (simulated) time. The M(foo) means "The message
) o7 G* ^( X+ I+ U // called <foo>". You can send a message To a particular* l& j" Z$ m' j. n$ b: x
// object, or ForEach object in a collection.
0 h$ U. o9 Z! N9 `3 W
; i8 M- J, o$ N; l9 T, ? // Note we update the heatspace in two phases: first run
8 y( \3 U/ j+ M) X) K4 t$ @! p* m // diffusion, then run "updateWorld" to actually enact the
: m9 h2 L$ V& O) k' m: J // changes the heatbugs have made. The ordering here is. F! j2 b( _! k9 e3 y
// significant!8 R; S c) F6 ^
3 L. z# {, Y' l) m% C // Note also, that with the additional
6 [: `! r4 V+ O- j6 ]) _ // `randomizeHeatbugUpdateOrder' Boolean flag we can
9 D& Y z: t* V" d // randomize the order in which the bugs actually run
8 _( a* k' G0 q$ {+ M2 G // their step rule. This has the effect of removing any9 y& x* S. ]2 t. E
// systematic bias in the iteration throught the heatbug
/ j, ?1 S( ~: g& r! z; _ // list from timestep to timestep
7 n) F0 l4 h' @! Y; m; | " ^2 v4 {' h, r7 a
// By default, all `createActionForEach' modelActions have
: F2 a+ F" B, H( o7 H, H1 d& U // a default order of `Sequential', which means that the& B& y2 s( d' R
// order of iteration through the `heatbugList' will be* U" Q" B6 n- Q9 s! D5 [& _2 i$ v' s& C
// identical (assuming the list order is not changed
) U7 z! x( a1 a9 f // indirectly by some other process).
% [2 `4 s- {! C ! X- _, L9 |- `# V; R' t$ R
modelActions = new ActionGroupImpl (getZone ());
}% w6 v0 ]8 R' | h( I3 V; E% a( a3 E
try {
9 a) `$ Y+ ~5 W modelActions.createActionTo$message
, y$ D/ e- X/ }( b% @- Z (heat, new Selector (heat.getClass (), "stepRule", false));
& h- a( N2 `! c } catch (Exception e) {! q3 a( b) n! b( s! s0 d7 P
System.err.println ("Exception stepRule: " + e.getMessage ());3 e+ ]- n/ g7 u! q* h4 _% f
}
+ ^8 |4 v* j4 N# H0 k0 Z y4 M) _. g" |
try {! M, X3 j! T6 b- V# Q5 O0 q) f
Heatbug proto = (Heatbug) heatbugList.get (0);3 b1 F7 o9 Y, Q
Selector sel =
, R* N6 @ Y* v* B# W new Selector (proto.getClass (), "heatbugStep", false);5 b/ I! o+ b9 d6 Z. S
actionForEach =: e0 Q2 \9 C& B, H- y
modelActions.createFActionForEachHomogeneous$call
7 R1 e& m8 C( D (heatbugList,6 x- x( r# } d
new FCallImpl (this, proto, sel,
. S/ }& s$ V H2 F( I new FArgumentsImpl (this, sel)));. M5 w& U% l* `! X2 W7 w
} catch (Exception e) {5 e' n" P/ i4 Q- g! c8 y
e.printStackTrace (System.err);
; {: @9 Z1 {/ S- J }
1 l& z$ I$ D- y+ i
3 [) S$ |1 U1 y syncUpdateOrder ();, \% F u0 E9 o# |4 V# e6 B% {1 I" _0 {
! ?. P( T. @& W4 t try {
) i* g. }1 p" l" X1 }1 p" F( z3 V modelActions.createActionTo$message
1 z! v8 q2 n0 x! R8 y# G (heat, new Selector (heat.getClass (), "updateLattice", false));
/ f# U6 e7 p* h } catch (Exception e) {3 G" Q! h* ^! F% j: T7 A: l
System.err.println("Exception updateLattice: " + e.getMessage ());; y$ w6 c" x2 j; C& k: H+ f
}( o0 j& y5 w' e
" [- ^& ?* O5 F8 P) v" `; ` // Then we create a schedule that executes the/ T: X' }+ ]: v$ [* r
// modelActions. modelActions is an ActionGroup, by itself it
2 E4 R2 l1 a. l$ E, Y. A4 O // has no notion of time. In order to have it executed in) M# u: |6 w6 }, o7 Z6 a4 K$ {) w
// time, we create a Schedule that says to use the# h) }. }( a ?/ f
// modelActions ActionGroup at particular times. This# I7 ~ @6 q; r9 \* s8 J! r$ c2 ?' d
// schedule has a repeat interval of 1, it will loop every
/ [/ K& q; m% {) p4 P // time step. The action is executed at time 0 relative to
4 I4 w8 y4 b9 Z+ W5 S1 H // the beginning of the loop.% m3 r. s+ d$ G4 H9 i) M
. ^6 P1 N5 T0 {; k
// This is a simple schedule, with only one action that is+ {, T( d# g2 `0 u$ @1 ?* ]2 N
// just repeated every time. See jmousetrap for more
& u6 j, Z, h& N. ]. Y. B // complicated schedules.
; G4 E6 E5 k0 }9 x3 k- s8 r * ~& q5 u- J6 H1 P) c
modelSchedule = new ScheduleImpl (getZone (), 1);. ^, }( z# A( b8 C0 u1 F1 l% e
modelSchedule.at$createAction (0, modelActions);
" q9 [! m% b, A' k. r
* R- {3 q7 w8 F: j& O return this;
& v0 P; _, W; A% G! h } |