HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
8 l9 y* S0 Y$ L3 W( h5 G5 W
- q0 o0 _# g$ V' t; ]: @4 f public Object buildActions () {- Q% Z9 b+ X/ Z" R J) i" j4 A
super.buildActions();( P0 e1 F' y* L2 s6 v
5 O4 M) F$ g" d* |4 z7 I6 n // Create the list of simulation actions. We put these in3 O. q$ H% T$ s" m+ a6 C5 |
// an action group, because we want these actions to be
6 [ n3 Z( a: a5 |+ f, J // executed in a specific order, but these steps should% \0 v6 {6 Z- _! S
// take no (simulated) time. The M(foo) means "The message
" M1 w- R& c4 G // called <foo>". You can send a message To a particular0 @" X& v/ ?$ R% f# C
// object, or ForEach object in a collection.! }4 C4 q. k6 e/ h
% ]6 ?: S% g! t$ M
// Note we update the heatspace in two phases: first run
! A& X1 k( `9 J3 j: M // diffusion, then run "updateWorld" to actually enact the
6 A7 f. u' C2 l& e& ]. T+ o // changes the heatbugs have made. The ordering here is$ h: }: p0 [& y' T Z1 d
// significant!1 @9 @" x# l# c) V7 w
0 ^) _- a& n u( u3 [( l
// Note also, that with the additional, E. h! ?7 r2 E7 N
// `randomizeHeatbugUpdateOrder' Boolean flag we can7 q. u6 {8 g, q: K
// randomize the order in which the bugs actually run8 a: B' j8 P; }& l# O" @ ~
// their step rule. This has the effect of removing any
5 s. _; a8 {% ~# P) ^: \ // systematic bias in the iteration throught the heatbug
% i M+ }- J8 ~9 Q) _% a // list from timestep to timestep* x1 C3 V7 A/ s* m( i) N
1 G' @2 u! ?2 ]' C3 Q, k$ p' ~: { // By default, all `createActionForEach' modelActions have
1 x7 q( m- Z4 f$ Y7 a: k8 t // a default order of `Sequential', which means that the
2 n4 a) R( t$ l$ ] // order of iteration through the `heatbugList' will be& W4 i: a8 G0 F4 m$ \5 W# j
// identical (assuming the list order is not changed- Z4 n+ Q* F5 e8 _/ D6 w
// indirectly by some other process).6 O, p& x$ r: y( W( f2 @% H7 H
- n# a0 G& v& w/ e2 f; O$ N9 j modelActions = new ActionGroupImpl (getZone ());
' Y- e, {/ q3 T Y/ G% H& D
% P8 A/ i$ [" o& A- T try {
) B& e v5 j7 L8 c8 T modelActions.createActionTo$message
% x8 o, Q2 i& ]2 u* b (heat, new Selector (heat.getClass (), "stepRule", false));
T A9 r7 |# U& A } catch (Exception e) {( m D1 [7 g! \8 s' e# |
System.err.println ("Exception stepRule: " + e.getMessage ());% \: d7 V# e* j8 w) r( l
}0 D9 w7 D4 a- \1 f; [, h( {% J+ c
2 y2 B( c' `( [+ K3 L( U( M) B
try {
. A- s! ]8 c/ M3 F" R1 b Heatbug proto = (Heatbug) heatbugList.get (0);
! I' z& T# j; B- f; Y2 h Selector sel = 4 u ~* t; u9 K2 j/ s& z: _7 }
new Selector (proto.getClass (), "heatbugStep", false);6 V( H+ ^5 T3 e( D0 F; n
actionForEach =- {; X( N1 z0 w# w/ H( m4 b
modelActions.createFActionForEachHomogeneous$call
' E) \% z/ x' c( U0 s: @5 C! z6 J (heatbugList,) M2 d7 m9 Y0 O: k" x& Q8 u! v
new FCallImpl (this, proto, sel,$ O/ B: K) W6 |
new FArgumentsImpl (this, sel)));. F: m7 \- K4 ] v$ v
} catch (Exception e) {
' G0 K. ^% {- b- H4 U. B7 J e.printStackTrace (System.err);% d$ V# C9 L% X( R
}
0 N* O9 q' O) ^" y - e0 U+ h/ g9 C/ N" U" ~
syncUpdateOrder ();" N, y# j! K* j; m& O" @
) u8 Y5 ]6 m1 |5 S8 p r+ b/ y
try {9 L D! e# |* z6 ^5 R Y
modelActions.createActionTo$message
) }: y! r6 Y% [: C8 q$ N (heat, new Selector (heat.getClass (), "updateLattice", false));
+ ]& P, m( |) v6 G* s } catch (Exception e) {: P: U3 y* l- S `3 [; _& h
System.err.println("Exception updateLattice: " + e.getMessage ());
! [# K% J, }( R2 ] }
0 O/ b; c$ f3 f3 `, y+ Z / z4 J7 d l, e1 F
// Then we create a schedule that executes the
. q0 P3 E) O5 r! [ // modelActions. modelActions is an ActionGroup, by itself it6 I5 X# N7 p$ s% N! u$ p2 ~
// has no notion of time. In order to have it executed in
0 G1 v+ {/ h# X! u3 I0 D$ s7 j // time, we create a Schedule that says to use the% j% f M% ~2 C: W- M- t
// modelActions ActionGroup at particular times. This
3 }; ]+ R. i9 B3 m, h% Z; z // schedule has a repeat interval of 1, it will loop every& h/ S$ e- ^3 n" F% e6 E- ?
// time step. The action is executed at time 0 relative to
! [* m" G S; Q& z3 {$ | // the beginning of the loop.: W0 e7 {# L2 a$ r8 B
8 [) o. m9 n+ x# i( p
// This is a simple schedule, with only one action that is
' s' H9 G. ^& T, j1 h& j' n! O) ]& s // just repeated every time. See jmousetrap for more# F0 u& M, B2 a4 x
// complicated schedules.) |: }3 ]& J f! s1 N
1 m2 L1 r7 ]! A# v
modelSchedule = new ScheduleImpl (getZone (), 1);
0 d/ p, j9 ^- U2 m0 m# I! \ modelSchedule.at$createAction (0, modelActions);- z' a! g$ y5 { |& ?( n# k- t
4 }9 P' d6 }7 V1 y0 A; {
return this;
9 ]9 V( w- t. C% E1 j" u } |