HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
/ v5 `: U. n. k% _6 e% I
7 }8 \" i) a _" D' D1 h+ U2 [ public Object buildActions () {# ?2 c; o$ ~$ H3 \8 T8 |
super.buildActions();
# e7 u/ `8 K3 v' b
; Y% G" O1 S( y. G+ X7 J // Create the list of simulation actions. We put these in
$ F" ~; V) p- G" l+ m // an action group, because we want these actions to be% ~" O8 H: @! b( g6 M, ]" E
// executed in a specific order, but these steps should
1 d6 h* o5 M( i8 c' L$ n* q, Y6 Y // take no (simulated) time. The M(foo) means "The message
; \; K/ V3 h/ E1 [7 U" o // called <foo>". You can send a message To a particular/ r; C+ p2 a" e" k% r6 |; [) G& c2 c) D
// object, or ForEach object in a collection.$ {5 U4 T8 j" \
) J, i. w* M' _% m // Note we update the heatspace in two phases: first run
9 n2 C* S" J3 M6 ~3 w n% ~6 l! C // diffusion, then run "updateWorld" to actually enact the+ ]2 |( R9 @0 _/ L7 e, q0 X) d+ S( p' G
// changes the heatbugs have made. The ordering here is
* [4 ~! S$ w" _2 q+ ^ // significant!. V4 y ~2 s* B% t
' z( [; y) e. k2 R6 x1 y1 R // Note also, that with the additional6 B( v% E" e" I+ {4 h3 M
// `randomizeHeatbugUpdateOrder' Boolean flag we can
2 E2 Z& v- W0 M6 L // randomize the order in which the bugs actually run
+ ?; p+ j, Z) j- s% z+ U // their step rule. This has the effect of removing any
" p9 L9 F% C$ `+ o& m1 e; j // systematic bias in the iteration throught the heatbug4 d# `) }/ @6 ~1 m& P( d$ z
// list from timestep to timestep
% x' r6 I* f% C, ]: ^ 4 ]6 \9 e5 n# R4 M+ K
// By default, all `createActionForEach' modelActions have
: X* k! c/ t! s, D2 g // a default order of `Sequential', which means that the
4 l8 j- {: | c // order of iteration through the `heatbugList' will be
8 z5 R' d+ U/ q0 x! b3 C // identical (assuming the list order is not changed
' a5 G7 X' a. b+ v% W // indirectly by some other process).
. r0 H0 ^9 A1 r. _4 w0 }/ v ( J1 h" t7 A$ H# J8 D9 }4 [
modelActions = new ActionGroupImpl (getZone ());
, a1 F' K, y, }" r+ U
8 s% R( L# ~' _ try {$ B( g; m& ` T6 @: C0 A1 S' Y; \1 q
modelActions.createActionTo$message4 R: M1 {- r" u7 @/ J1 G
(heat, new Selector (heat.getClass (), "stepRule", false));7 B. ^( S: c' ]4 {, j
} catch (Exception e) {
& G8 B, k* G9 z2 w System.err.println ("Exception stepRule: " + e.getMessage ());3 \& T: O/ E4 b& \$ x4 t
}
& L0 A( I1 }7 i; b
- s7 W- |3 D9 l) A7 k8 [ try {
$ Q+ r. p1 E$ c Heatbug proto = (Heatbug) heatbugList.get (0);
: v( U1 y2 @" w& [% h# ?5 s Selector sel = - D. Z" N9 E* h7 t, O/ c4 ^
new Selector (proto.getClass (), "heatbugStep", false);, a* Y# ~' q9 M
actionForEach =: M R, v6 ~- j% c3 q' y
modelActions.createFActionForEachHomogeneous$call
6 p: V1 U; x t7 r# }, o (heatbugList,
1 A2 e; I8 P$ z% C new FCallImpl (this, proto, sel,- R, Y% H/ g# v/ j
new FArgumentsImpl (this, sel)));$ H2 |0 t7 O. |! Y' S. ]& ^
} catch (Exception e) {/ b2 H2 E0 V1 b
e.printStackTrace (System.err);0 j/ g. A' _# e& B* S
}; @% D6 b# ]7 {4 [7 {9 {
5 M0 x. E1 |% O6 U! v
syncUpdateOrder ();2 d+ ~" W6 X3 n: G* q, I* t
1 ^4 J* E$ ~, t# ?- H( G try {
% ~' m8 q6 R$ V modelActions.createActionTo$message 2 c- S& t( J4 v- |
(heat, new Selector (heat.getClass (), "updateLattice", false));6 S9 T ?4 y9 e: G4 W3 m
} catch (Exception e) {
4 ^8 h# a e! x& o System.err.println("Exception updateLattice: " + e.getMessage ());
1 I% Y* i5 J0 a }
8 ]; l0 f2 s x. X2 a& g
9 T/ l4 s, X' [7 S' u8 R // Then we create a schedule that executes the
8 r% `; ?! h9 D- |9 q6 L // modelActions. modelActions is an ActionGroup, by itself it( |# g X9 B" J( ], c
// has no notion of time. In order to have it executed in
, q" {( J! l' P8 p" V // time, we create a Schedule that says to use the3 |. ?0 j: ^9 W: Y: g" D$ Z
// modelActions ActionGroup at particular times. This
- S. e4 R+ c$ c" [ // schedule has a repeat interval of 1, it will loop every
4 @8 k5 V, d& n0 u, O // time step. The action is executed at time 0 relative to( _0 m/ q+ C& P0 k( X5 R
// the beginning of the loop.- Z( ~: I$ g* Y/ a+ ]
+ T0 E, _6 s/ D L // This is a simple schedule, with only one action that is
8 h( d q) z1 x, \ // just repeated every time. See jmousetrap for more
/ W4 v) u5 Q3 b9 D4 X // complicated schedules.
; j/ {. e* a, P0 T8 o2 O7 } % m/ R% E( e' n" s8 S
modelSchedule = new ScheduleImpl (getZone (), 1);; W$ ~' I) Z: D2 y4 U! g) {
modelSchedule.at$createAction (0, modelActions);
- U- Z& l& [ |/ B$ I" P% s. _8 f 1 r, _, v: v' ]* N$ `1 W
return this;
7 m. H* {4 s3 x+ w! M8 j } |