HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
( P( u/ x7 I( k0 o' v3 F& x( l
) p* g2 I9 S0 n# n9 ? public Object buildActions () {
6 `, ?5 b' x/ b4 q8 S super.buildActions();
# R8 w8 Z/ f6 Z* V 9 g# z& A9 B- E* s1 t9 c3 M
// Create the list of simulation actions. We put these in& } c$ Q8 |' p0 v4 e& i9 M0 K4 d
// an action group, because we want these actions to be
! C- {( A _1 W8 H7 ^ // executed in a specific order, but these steps should
5 R# D" e/ ]+ F8 T$ L( f/ k // take no (simulated) time. The M(foo) means "The message
9 V2 }8 u N% @+ O // called <foo>". You can send a message To a particular& y, `* m/ f# i# I
// object, or ForEach object in a collection.
% Y; R' z" } A0 v5 D0 M: S7 B
9 P/ K7 _7 F" P" n5 a; y // Note we update the heatspace in two phases: first run4 M+ {9 y' A1 I6 m7 _
// diffusion, then run "updateWorld" to actually enact the+ j. c, L2 @5 B8 i) q
// changes the heatbugs have made. The ordering here is( k+ v5 I+ D; ~9 H9 c+ X
// significant!. E u; @- x& H( K
' y1 N0 l: V/ Z! H7 r) ? // Note also, that with the additional
# L. `+ v; i& H5 F% i // `randomizeHeatbugUpdateOrder' Boolean flag we can$ `: V8 x5 c* r
// randomize the order in which the bugs actually run
3 X$ l& Y Z; ]3 t1 n // their step rule. This has the effect of removing any
: c! r1 ?) d& ?% Q6 {, d" T R, x // systematic bias in the iteration throught the heatbug
4 W+ ]0 n3 |$ B% A, I+ P/ u! s3 e // list from timestep to timestep! a, h2 N; N! }3 }9 }
$ u; o: o I! ]1 e! R+ ? // By default, all `createActionForEach' modelActions have: L/ ]5 @+ H \/ I& p' A8 ]
// a default order of `Sequential', which means that the
9 h8 V, s% ~' b' f. Z' s R // order of iteration through the `heatbugList' will be
8 u/ N0 [- K6 a7 I1 Z+ W7 V // identical (assuming the list order is not changed
& B) ~) Y- _ x6 {. Y6 I1 ] // indirectly by some other process).- h; t: U- z- c* F) T+ z, K
4 y4 ]4 Z* @5 V5 p: m
modelActions = new ActionGroupImpl (getZone ());
2 U) x+ d f$ p8 t3 y* k) q7 v" B+ e% \6 `& e" C7 h: @& g6 X1 d4 _
try {
: Y- y; M3 F7 f" u modelActions.createActionTo$message
A0 \- A' x- x1 g7 O (heat, new Selector (heat.getClass (), "stepRule", false));0 c! Y+ d L i" }9 f1 m: ~
} catch (Exception e) {
z: ^1 \& Q- U5 w# ?. f4 B" W System.err.println ("Exception stepRule: " + e.getMessage ()); K' e" p* T" `' n- F( N) }
}
' \+ S: L2 Y/ _( J, {( {" q2 e5 P8 [% \8 |4 q# ~9 F+ X* r
try {# n! z3 d$ o8 V# O1 q
Heatbug proto = (Heatbug) heatbugList.get (0);
) M* s! q5 F) [0 Y$ s5 u Selector sel = # w5 m4 K* E' j. o; @
new Selector (proto.getClass (), "heatbugStep", false);6 Q% E7 ~" R4 U# W6 T" s) W+ I0 p- W4 V
actionForEach =* K$ p5 ?* [. s. K
modelActions.createFActionForEachHomogeneous$call5 v) H/ r* ?0 P
(heatbugList,
4 Y% z0 v# m- P new FCallImpl (this, proto, sel,. G- B# {" H0 J
new FArgumentsImpl (this, sel)));8 k: y% F' J$ t, K f4 T+ y
} catch (Exception e) {9 I4 t9 s5 \ B. F; v
e.printStackTrace (System.err);
1 f$ w! P" T% h7 u+ k, E) M }" ]: j( ?6 x7 v8 ` G/ x3 B
9 W2 \3 W; _0 D4 e7 y& q
syncUpdateOrder ();
! b; x( k; q, I' B3 L g. B# J' d6 h/ x
try {( ]5 q0 ~8 G3 x4 Q' ~& J; W0 o, }
modelActions.createActionTo$message - G# z' S+ N9 D1 z, Y
(heat, new Selector (heat.getClass (), "updateLattice", false));, {. ^0 B( s# O, |5 Y/ H+ r1 Q
} catch (Exception e) {$ p# ?5 \2 M: Z3 E/ D% ?
System.err.println("Exception updateLattice: " + e.getMessage ());0 \; ~% Z+ l# Q* X6 p
}! n1 B0 P1 i/ s) [1 |
. O& ^$ l0 n) l9 q B5 I- Y$ C) Q // Then we create a schedule that executes the
; O0 v, z" I% @' h5 ]# Y5 \ // modelActions. modelActions is an ActionGroup, by itself it
1 n9 J- d5 I5 b; L j+ } // has no notion of time. In order to have it executed in
) ]6 D: J2 N# P9 q3 b+ E1 { // time, we create a Schedule that says to use the2 h2 @( z2 s% N- X: I
// modelActions ActionGroup at particular times. This
% B3 _$ ?! @$ x$ ] // schedule has a repeat interval of 1, it will loop every
+ [, x) F3 ]* I( n // time step. The action is executed at time 0 relative to
9 K/ \- j& @3 R. J! o // the beginning of the loop.
" \6 e. V2 d9 j y, U; u' z$ P. |
// This is a simple schedule, with only one action that is# a4 ?0 U* l7 i/ s2 m
// just repeated every time. See jmousetrap for more
8 |9 w, X+ _# \+ _" t, S // complicated schedules.
$ Z2 z& p9 @! n3 u9 f' l8 B ) u C' @/ C! z; u8 r
modelSchedule = new ScheduleImpl (getZone (), 1);2 Q' G! a8 _& c; M4 ]4 L f: B( s
modelSchedule.at$createAction (0, modelActions);3 T( L: j' B. t0 e, l
! K3 y( i7 r4 d
return this;1 c6 x2 u0 i' p/ W& S
} |