HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:: n# u2 { U3 \! n+ I
* h5 D+ U8 M" }8 E public Object buildActions () {3 |( F2 Q6 ?, D7 J' r4 m
super.buildActions();
/ d7 m$ i4 k: {* Q$ | + [& c/ y* q9 p! _
// Create the list of simulation actions. We put these in, {, N) }3 z7 F7 j+ U" J6 D" r3 x& J
// an action group, because we want these actions to be
0 {) \1 ]- O6 `. q2 e // executed in a specific order, but these steps should
- I F7 z8 P3 p7 f6 O M // take no (simulated) time. The M(foo) means "The message" [* Y+ t# ]4 [- E# P
// called <foo>". You can send a message To a particular' n: K0 q( R9 j C/ R" M7 w1 g
// object, or ForEach object in a collection.
?& Y$ X% P# |9 V! d( e4 G
/ z4 k' V5 w1 O2 n0 t8 a# Z // Note we update the heatspace in two phases: first run
, E+ o1 t% @( o. k" b( p // diffusion, then run "updateWorld" to actually enact the
0 x+ ^3 {- x& u* Y* F1 e- d" G // changes the heatbugs have made. The ordering here is
* {; Q C) |; e1 S // significant!
* ?+ ]' O! k; H0 T2 h/ ~ {
, ]/ g% [. l) Q0 [. B, z // Note also, that with the additional0 E( R; |% Z7 r5 d: k. l: E% k
// `randomizeHeatbugUpdateOrder' Boolean flag we can
. q; C5 o& G( ^! _* j // randomize the order in which the bugs actually run
1 b8 q/ L8 q4 F7 y. U/ p2 j // their step rule. This has the effect of removing any( I: w4 o3 l; @& s! a0 d$ i
// systematic bias in the iteration throught the heatbug2 [% z; A5 b" M8 K
// list from timestep to timestep
0 @5 H! x; a# X . O7 o0 G/ B0 B! \6 c
// By default, all `createActionForEach' modelActions have
' d0 S. T( [ I // a default order of `Sequential', which means that the
/ M, @6 F/ L" k4 O( p; G) w // order of iteration through the `heatbugList' will be
: w% B1 F4 |; ~, [' V1 } // identical (assuming the list order is not changed- S' B2 V1 f; j/ D* k$ I
// indirectly by some other process).% O. H1 `7 k* l8 R
$ S' T; z* V+ t; m( L' E modelActions = new ActionGroupImpl (getZone ());2 ]& D" n) `( V5 h+ c% C# k
% K/ T) d* I, A2 v* { try {0 a& N' R H# q. M) F% U9 F
modelActions.createActionTo$message
* W4 @- \: V P9 w (heat, new Selector (heat.getClass (), "stepRule", false));
% z; p" j- P! e& H1 b& T } catch (Exception e) {
! z t$ t8 |, D8 ?/ r System.err.println ("Exception stepRule: " + e.getMessage ());1 ~# d, Q0 U/ E) Q
}9 C3 P- t, o/ A
7 e% N# I. b! h& W- M
try {2 Q& l( x7 n6 ?+ c% E9 l4 K
Heatbug proto = (Heatbug) heatbugList.get (0);* ?# J" S# M. m L/ q! r; F
Selector sel =
7 H: f g5 ]1 z# G7 d new Selector (proto.getClass (), "heatbugStep", false);. @# y- I+ N7 u. M/ V7 |3 m
actionForEach = P7 s8 o' \6 I8 x" e8 ] I' S5 J
modelActions.createFActionForEachHomogeneous$call
& I7 [: v5 C* u6 c T: i) J9 A' x; ? (heatbugList,
7 P( g6 ]% T* W+ V2 A new FCallImpl (this, proto, sel,
' w/ }$ R# n6 \: Q( q new FArgumentsImpl (this, sel)));
; ?% Z1 R( {$ u4 @! y2 a4 T2 K } catch (Exception e) {0 p# _! V H+ Y0 |7 D) U- R1 a/ c
e.printStackTrace (System.err);& S+ E6 T8 K3 O1 p5 s: j
}
9 H) |, m) |5 h! r" y1 D2 x ; N; L% [+ z2 E0 {4 y
syncUpdateOrder ();
5 w* n j; O. V, \" ? n) V
e" H' ~& t' V& g$ Y% I& ^ try {. b' \+ U4 D+ y, ~ T6 p
modelActions.createActionTo$message
$ Q8 ?# c" I- c' _8 z (heat, new Selector (heat.getClass (), "updateLattice", false));
0 ]- m) E6 @; L4 ?1 W2 b8 U } catch (Exception e) {
4 k5 q T9 R' W- ~2 W2 I System.err.println("Exception updateLattice: " + e.getMessage ());
* z/ h5 s6 ?+ i7 X: r" d, Q! E }
. j5 n. a# \- B( ^' J/ e% r , ]6 P8 U( M* c& S$ k& U! [: d, A
// Then we create a schedule that executes the
3 Z3 ]8 U0 i% ~6 A0 t2 J# d // modelActions. modelActions is an ActionGroup, by itself it6 `: T' O+ ? D- v: }3 v$ n
// has no notion of time. In order to have it executed in' d/ g- P# P% m* Y A) Z
// time, we create a Schedule that says to use the& I1 ]5 \) ^' u0 s5 G
// modelActions ActionGroup at particular times. This3 ^, K% C0 E; v' t
// schedule has a repeat interval of 1, it will loop every3 u% {( {) @* j, v
// time step. The action is executed at time 0 relative to$ I- k, m& S7 |& x- E
// the beginning of the loop.
$ [7 d" l$ b, \) i) Q
8 n0 B, F. r" |+ U0 z8 S3 L // This is a simple schedule, with only one action that is
+ Y. E# \3 ]% ^- f4 I! m // just repeated every time. See jmousetrap for more' J7 @5 [+ F# |
// complicated schedules. G/ R7 [: K( h0 e( t+ w. ~
" L; K! E" Y+ @) \( k% q! L
modelSchedule = new ScheduleImpl (getZone (), 1);
8 @7 M6 i4 t1 v4 w# s0 ^ modelSchedule.at$createAction (0, modelActions);
3 M/ v6 h: Q" r% i6 C9 ^3 A
7 t. Q% k" l2 Z6 `9 `. Q+ N6 m6 ^ return this;* S/ ^* g0 W4 [, M! X/ X
} |