HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:& h' q; @; _0 {
1 } o- X& Y( F* a" T public Object buildActions () {; l$ w+ n: B H: p& u R
super.buildActions();
2 Z F1 s3 I, i8 O/ h! c; X , k. k7 B' J2 m# E! p5 _2 I* g
// Create the list of simulation actions. We put these in0 _& C( i* ~- y8 Q. E
// an action group, because we want these actions to be
( e6 q; X- `" c0 } // executed in a specific order, but these steps should/ z4 z( |0 }0 L2 B- D3 q* e* }
// take no (simulated) time. The M(foo) means "The message
6 m0 c! Y6 V6 I" n# ~) ]1 g) |7 q // called <foo>". You can send a message To a particular
. r: L( a1 w. i! n! K- i! u5 C // object, or ForEach object in a collection.8 s3 d2 n1 o8 v1 @4 ^ o
/ D1 I0 B" O$ P2 V2 g0 s7 _ // Note we update the heatspace in two phases: first run+ X/ T: Z; W6 j
// diffusion, then run "updateWorld" to actually enact the
8 I/ Q' a/ O9 B$ _( j9 H // changes the heatbugs have made. The ordering here is
6 o& V( w; x" r2 ?0 U. F/ K; F // significant!/ T6 z0 i$ [* A
. U2 `6 ]! o( b" Z8 u" o) W+ m! L // Note also, that with the additional
3 ~1 e" I5 s y( K+ R // `randomizeHeatbugUpdateOrder' Boolean flag we can
8 ?7 @' W* b/ Q& F. O) v7 O // randomize the order in which the bugs actually run0 o" R2 l3 ^/ m8 c
// their step rule. This has the effect of removing any
* V) O& w$ S' }1 t' C* X // systematic bias in the iteration throught the heatbug
4 p7 A( [$ q8 t7 y* S+ W" V2 @ // list from timestep to timestep. u; n. ~$ [) U" L' b( v
! A# Y$ U, C. J' U0 ~
// By default, all `createActionForEach' modelActions have
3 Y7 h" e% p5 w6 C% s" U // a default order of `Sequential', which means that the* U! @& s6 t I
// order of iteration through the `heatbugList' will be
. H7 Q3 k) K2 G( ^* p // identical (assuming the list order is not changed* ~9 s' n2 g( v5 }. O: k! m1 v
// indirectly by some other process).* J( f5 E( C5 A
7 e1 G2 k9 d T; C; m modelActions = new ActionGroupImpl (getZone ());3 j8 [0 G$ m7 L2 Z- i1 f3 z, \( Y* B
" A8 O+ a% n9 J8 J0 z9 x2 K @! \
try {
& y9 x3 g! g9 ^- q modelActions.createActionTo$message
! I n: g# ]; d9 f9 B4 V# P- S (heat, new Selector (heat.getClass (), "stepRule", false));* j! G/ ?( J5 K& C% _. R; r+ Z5 S
} catch (Exception e) {' C+ }* m1 D- b
System.err.println ("Exception stepRule: " + e.getMessage ());+ O5 s P$ r7 v- {, L0 }; a
}, k/ Y3 G( P9 {& A4 X# U
% z I2 R+ |' x$ k- m0 e
try {
* B/ J. j8 j! h- @2 Z5 o1 N; ]/ B Heatbug proto = (Heatbug) heatbugList.get (0);
c: @1 }: u: a8 y; G) @ Selector sel =
' j; t: V* z" D$ d7 s2 P new Selector (proto.getClass (), "heatbugStep", false);
, w# t, l" v* z ~5 R actionForEach =
" K9 w6 Q) s }6 o) I modelActions.createFActionForEachHomogeneous$call
3 O' t2 d& l6 V! U3 v3 u$ N (heatbugList,
$ ^ f% J( K; I' e- i3 ~9 o new FCallImpl (this, proto, sel,
) `4 H9 v; ]. a. \2 Q' I& c new FArgumentsImpl (this, sel)));
' k) G" \) r2 y/ i' W } catch (Exception e) {
; K i! F2 [# v& J) i9 G$ Y e.printStackTrace (System.err);6 C" n5 V; ^0 V# E, l
}, I% l0 _: v4 X0 {
! ?) v: E8 G6 g) _# M( k) A3 I2 k syncUpdateOrder ();
5 G' e" B; a, u8 S H4 E0 ~. W/ \
try {
7 Q5 }! o: ~0 K% v l modelActions.createActionTo$message
; s- S. A. a' d: W" y0 W* B0 { (heat, new Selector (heat.getClass (), "updateLattice", false));3 o; R( `, n, }# A: ~
} catch (Exception e) {
0 o1 x S2 E4 C1 U System.err.println("Exception updateLattice: " + e.getMessage ());
/ I+ }( t$ A" s; a5 [) V, G5 N }( i; n( U" D7 E% g
) x" n: l6 g4 }+ {3 i // Then we create a schedule that executes the6 Q- D2 T. i+ V1 e
// modelActions. modelActions is an ActionGroup, by itself it
: n6 {0 Y9 _9 S // has no notion of time. In order to have it executed in
. f* m, h2 k9 T/ N; c! _. d // time, we create a Schedule that says to use the( n) @" R/ ~: h/ P1 a3 |. y8 e) p
// modelActions ActionGroup at particular times. This v7 q. D* O Q+ r8 t/ |
// schedule has a repeat interval of 1, it will loop every
! s8 }# m2 B3 Y* L1 ~2 L // time step. The action is executed at time 0 relative to$ p5 c( j% D& `; N# E3 i
// the beginning of the loop., S+ W- j& K" F9 s- u1 |8 b
' I$ u0 K3 a( g" w9 \. S; _4 {
// This is a simple schedule, with only one action that is2 g G: Q( D. f `/ f
// just repeated every time. See jmousetrap for more0 l2 I- m& n9 D+ z
// complicated schedules.
- \1 } O0 X" F! H8 Z+ [( |$ s & c6 D& j: g8 {4 R
modelSchedule = new ScheduleImpl (getZone (), 1);0 l3 @# N2 p; O
modelSchedule.at$createAction (0, modelActions);
/ i) k) H. c' X/ S
' e6 b+ M0 U" B return this;
% O6 T3 g" n' F/ G } |