HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:9 R' T+ {" {0 Y: k4 X e
, A/ ]$ d9 o2 G- B8 ^# H public Object buildActions () {3 T8 g6 a" h; }6 _# k
super.buildActions();
\; P$ D- n/ m S3 j. p. R
% _4 d S3 p3 _' H3 | // Create the list of simulation actions. We put these in
8 [9 j' |9 ^9 Y, {; ` // an action group, because we want these actions to be1 E, t+ |, l# U# {
// executed in a specific order, but these steps should
5 V& n" r& Z; f$ U // take no (simulated) time. The M(foo) means "The message& f% M: q2 f- ^* D
// called <foo>". You can send a message To a particular7 g' M! K- l$ |$ \% @! ~ |4 j
// object, or ForEach object in a collection.2 c# F1 C9 p6 J- z
4 T0 r6 c) P7 n6 G
// Note we update the heatspace in two phases: first run
) y6 \0 V9 |9 ^! L: ] ~ // diffusion, then run "updateWorld" to actually enact the6 w5 p. C6 M9 T, i* R O
// changes the heatbugs have made. The ordering here is1 i/ A% J+ N4 u0 @
// significant!$ K* L+ W# b# j- m+ ~$ y" F
5 h. S0 y. q& f* p3 t: D# a O6 |' F
// Note also, that with the additional
" F1 P' E0 s+ { // `randomizeHeatbugUpdateOrder' Boolean flag we can
4 [3 c" j0 ^+ I" F8 X( C6 B) K; E // randomize the order in which the bugs actually run2 m! Z) C, c6 u
// their step rule. This has the effect of removing any z- C3 s4 b$ _- H2 o; ~* }
// systematic bias in the iteration throught the heatbug- [% g6 y4 V' U5 N/ |5 _% ^
// list from timestep to timestep
' X: Q& V+ W2 Q
& O! N0 F, E6 H2 Y n ?2 h // By default, all `createActionForEach' modelActions have9 z9 S% i: |! M5 P, M [
// a default order of `Sequential', which means that the* N6 v4 G+ T5 R4 ?& k3 e
// order of iteration through the `heatbugList' will be
- x! H+ t) H _1 x- {& w( [ // identical (assuming the list order is not changed) d* `, D" I. I& V: L: X
// indirectly by some other process).
. Y I# |9 @2 D
% v& ^( q k( p8 j/ R modelActions = new ActionGroupImpl (getZone ());
9 n$ _* s b9 ^! d. C5 B# q7 F6 H, o ~7 H) i% V
try {
' t$ ^ g2 N+ h, I6 { modelActions.createActionTo$message
* Q' u5 {0 n+ J: a8 i) `8 Y, E (heat, new Selector (heat.getClass (), "stepRule", false));
) C( B( V( f' e# E } catch (Exception e) {
/ S2 F8 c( L: a% d# [ System.err.println ("Exception stepRule: " + e.getMessage ());- U$ N, ]9 r7 q1 ?2 n1 J
}$ A( a% _; z4 q1 P
% \; I: v; q/ ?3 G5 v) g4 |
try {5 U( s: l" q' f7 X+ J) C9 q
Heatbug proto = (Heatbug) heatbugList.get (0);4 B8 G4 H6 J) W' Q! [6 R
Selector sel = : @$ d& w4 [* ^# O1 m( J
new Selector (proto.getClass (), "heatbugStep", false);
4 o$ ?7 y- B6 d actionForEach =4 \5 e# }, ?* g+ v9 Z3 p
modelActions.createFActionForEachHomogeneous$call% Y5 N' f$ Q7 N9 e" d- D
(heatbugList,6 q# A- u3 Y5 D+ d
new FCallImpl (this, proto, sel,
5 Z% t2 b% C, {) K' d new FArgumentsImpl (this, sel)));3 j; f5 X4 Q4 j2 ~
} catch (Exception e) {
U2 z& j7 W. i# x- j& J e.printStackTrace (System.err);
! E8 P' ~7 X$ }& u# l5 p' A) {- P }8 ?( G# s3 g- r0 s" e# A
" F1 G7 o* ]# d$ N$ T& C syncUpdateOrder ();
4 d5 i ?" W+ `3 G7 Z( ~' n5 k# S& A6 E8 Q
try {7 W1 L( _/ P' A) K6 R. h. Y7 b0 h
modelActions.createActionTo$message
7 h: @, ]3 q, c7 Q3 T) k (heat, new Selector (heat.getClass (), "updateLattice", false));8 ?+ f& P/ t" H
} catch (Exception e) {
1 ^5 v! |2 n0 F" {3 a, g System.err.println("Exception updateLattice: " + e.getMessage ());
, B4 f. u9 I: i }
8 P$ A% |: ?3 X$ O 1 K( z+ O2 W3 k) ~+ t' b: A0 r
// Then we create a schedule that executes the
/ x3 n3 u- }$ P( T% ^% I // modelActions. modelActions is an ActionGroup, by itself it7 s' y! m; ]( u- C; A
// has no notion of time. In order to have it executed in5 |6 }/ D1 I1 I- p, f: T
// time, we create a Schedule that says to use the0 n/ @4 H6 p' Q- {0 u
// modelActions ActionGroup at particular times. This' ], K' f, y( {
// schedule has a repeat interval of 1, it will loop every
, x7 w/ B8 m. `3 E( ^; A // time step. The action is executed at time 0 relative to
( S$ u: Y+ V, U1 h3 W // the beginning of the loop.' {; n, H. A* T" P
# N% N* I- u$ K' O9 J
// This is a simple schedule, with only one action that is
. e9 e. G! p2 O4 ?. R! b // just repeated every time. See jmousetrap for more
1 s4 z; Z6 C5 I* K+ f( N6 {7 W // complicated schedules.0 | V3 Z( r8 [5 C
, Y, m6 {- @% t modelSchedule = new ScheduleImpl (getZone (), 1);
7 j+ X4 D& J3 ]- s modelSchedule.at$createAction (0, modelActions);- N; Y9 C- Q; o8 I
& c K2 ^6 u) x' | return this;
* ]6 }" `- t2 n. y! r) u } |