HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:) n* c, ]) _( Z6 u1 J0 R$ D! R+ A
/ ^( f. B7 _7 K4 {0 V2 P" S public Object buildActions () {
3 A7 N4 n: w+ ?+ E+ A: s# f super.buildActions();# B, R. h" K. j, }
3 I. Q! n1 C+ v2 w" ?! J // Create the list of simulation actions. We put these in& l1 t8 ?) g( P+ G2 f2 u
// an action group, because we want these actions to be
B$ c( h' E! u- Y n // executed in a specific order, but these steps should8 [' a" G' \. K+ @
// take no (simulated) time. The M(foo) means "The message
: z/ Z, ^: _" n1 ^ // called <foo>". You can send a message To a particular
+ Z6 v- X/ r* ?7 ^6 b& T) \' x // object, or ForEach object in a collection.2 ^, m) f- @5 J1 ~
) J* B' M2 M; N0 _, Z // Note we update the heatspace in two phases: first run- e( f" f6 @7 d; C& T, d
// diffusion, then run "updateWorld" to actually enact the
9 s4 D& k4 f) a% q% d. @ // changes the heatbugs have made. The ordering here is
" R, b4 E6 o! x // significant!5 N& S4 y' l% G' Q6 v3 \
* f& I; y U1 T# Z
// Note also, that with the additional
. ~; P* h3 g( L3 z' D& B6 I% X& @ // `randomizeHeatbugUpdateOrder' Boolean flag we can
8 ]( b3 S( T# {+ D" M // randomize the order in which the bugs actually run
. G4 C! S$ M* \' k- _" M // their step rule. This has the effect of removing any
+ t& m4 R% l5 D3 f0 `. J2 o // systematic bias in the iteration throught the heatbug
0 l) \6 G! Y/ S. @9 ~( J4 v+ ~ // list from timestep to timestep0 w k7 ^7 k" [. k" j6 x
, s0 D6 q( Z: X; J7 X; s
// By default, all `createActionForEach' modelActions have: N: H+ _+ t$ L
// a default order of `Sequential', which means that the/ x8 {9 H$ y/ J, A" V
// order of iteration through the `heatbugList' will be4 s' a) T: [* e, u
// identical (assuming the list order is not changed: P- f, x& ^: b4 i- C/ j9 N. A% k0 x
// indirectly by some other process).
# g+ [1 ^ }1 \8 d; N. ]
! u/ L$ B2 t4 X6 r modelActions = new ActionGroupImpl (getZone ());
, J5 v7 L& c( \. {) \+ S' s2 i( \8 d. j; O
try {7 x3 j# t2 N$ ^6 E8 M
modelActions.createActionTo$message% X l* d$ L. ?' s' k
(heat, new Selector (heat.getClass (), "stepRule", false));
4 v& o, ]- x/ h5 O" w8 T. z) v } catch (Exception e) {
9 n- S1 L: V2 N2 x/ ~! P System.err.println ("Exception stepRule: " + e.getMessage ());
7 ^9 g( X. `2 Q5 L: g }& R. z6 Y( D9 }( T" H* V8 U
/ s7 h9 k9 C: \4 r* v9 D7 e8 \
try {
2 A; U5 ~ U7 r! U! _/ M { Heatbug proto = (Heatbug) heatbugList.get (0);
- f4 }& c$ u H9 T/ T; b# b: k Selector sel = 6 W/ N* D @% C1 f2 O) G0 y
new Selector (proto.getClass (), "heatbugStep", false);
. ~9 h. \6 J& y" J B- Q actionForEach =
1 F; g! }4 x0 H$ T- M modelActions.createFActionForEachHomogeneous$call
% Z7 j4 M- S# ^: ^5 s& p (heatbugList,6 X2 ?5 D( q* K% z
new FCallImpl (this, proto, sel,6 g+ i( M5 a( o4 s
new FArgumentsImpl (this, sel)));
, O, |4 R5 m# { } catch (Exception e) {
4 ? A+ y# P7 ?6 p% a e.printStackTrace (System.err);) H# S' H \+ O. [+ k- a& I ]
}4 G! ]# o; I+ b
1 [1 A$ X& T0 s8 G. E syncUpdateOrder ();
; a* d+ j4 b% ]' g% e( v- Y7 G0 q7 E6 l+ j
try {
) c6 }4 n2 U! \ modelActions.createActionTo$message
4 t; `. h' C! p9 t9 O1 E (heat, new Selector (heat.getClass (), "updateLattice", false));9 b. L& `- ]: Q" v
} catch (Exception e) {4 z1 @) W& J: f4 s- o
System.err.println("Exception updateLattice: " + e.getMessage ());# c1 C- Z% ~. G$ B
}1 e4 V+ w. K9 ^. F; ?) T
0 O, l3 g: \8 A1 q
// Then we create a schedule that executes the
0 w+ B1 G. [8 H' ^6 o% V // modelActions. modelActions is an ActionGroup, by itself it u, ]! M+ M- W# J9 \
// has no notion of time. In order to have it executed in
8 u: ?- }4 m I' P } // time, we create a Schedule that says to use the; Q5 e. `: R" }" Y; o
// modelActions ActionGroup at particular times. This: W) l! j6 q `- y; c1 d' H3 z
// schedule has a repeat interval of 1, it will loop every5 ]% ^; S4 s4 Q! [" q5 }7 l3 k
// time step. The action is executed at time 0 relative to, R$ @0 K( K) Y, i0 `& z. S/ [# \
// the beginning of the loop.
/ X/ c% I1 K9 B3 v! |
8 U. t4 F& Z- U8 h0 H/ D // This is a simple schedule, with only one action that is6 R x: `" k" `$ k
// just repeated every time. See jmousetrap for more
3 k9 j0 n M1 W7 ^; M // complicated schedules.% g, |* ^4 Q0 q8 h
& u4 I# k. p2 ^' }: S) m1 l5 V- L modelSchedule = new ScheduleImpl (getZone (), 1);
H9 o/ w& ?' X: z9 g modelSchedule.at$createAction (0, modelActions);
. V2 Z# t/ d9 y0 H# x+ F0 B6 H+ ^ - t& B5 F( p" L% @4 N: k7 _
return this; K6 s& q6 D8 l; ]4 @& j
} |