HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
# Q/ h9 ^: ]4 m8 m# {. y$ B/ M/ H- E4 Y }2 [
public Object buildActions () {5 a: X8 ^8 s5 i i% v) t
super.buildActions();3 s) {" t+ b) Y `, H# C- D
* c% w g! r- N- L/ U# v8 Z5 R* Q // Create the list of simulation actions. We put these in
6 ~9 {& c' i/ Q' { // an action group, because we want these actions to be) f8 ~# P/ U3 m K8 A. N* O6 w+ D
// executed in a specific order, but these steps should
7 A- ?. ~3 i7 C6 K5 W5 c // take no (simulated) time. The M(foo) means "The message
2 f" G; L8 c1 C1 A7 P // called <foo>". You can send a message To a particular5 L' x; k! ^& Z; h" @& \
// object, or ForEach object in a collection. U) O* n* E2 j, Q. u1 V
1 L" [2 Z! _& W
// Note we update the heatspace in two phases: first run: C2 O* J9 t3 n" s- Y" C! t J4 o
// diffusion, then run "updateWorld" to actually enact the
2 `4 n5 d( U W. m" V' e8 O // changes the heatbugs have made. The ordering here is
; u% B# F0 q1 S% F // significant!
8 B6 v+ a7 q& f' N1 u* v) D' { ) l& ]5 B: f) q4 v
// Note also, that with the additional
- x7 m) u, s0 G/ i b& p // `randomizeHeatbugUpdateOrder' Boolean flag we can
: {! j0 @8 V1 K9 d4 u, {& F) K // randomize the order in which the bugs actually run
% j( y3 v B7 @8 f; ~. z7 P- r // their step rule. This has the effect of removing any
" f9 p7 B, n& \' i // systematic bias in the iteration throught the heatbug9 o. b2 f: o' w, c% u7 w
// list from timestep to timestep
6 E% n$ y( j/ j' |
: B; T4 G/ T0 e/ Y* e // By default, all `createActionForEach' modelActions have
6 D, N- o6 `7 G3 L8 B0 a, w // a default order of `Sequential', which means that the
* o. T* e: w) N2 A; z4 A8 B( X, D // order of iteration through the `heatbugList' will be
: h) C8 H9 ]" L1 T // identical (assuming the list order is not changed7 Z+ w2 z' _. D5 m2 ]9 ]
// indirectly by some other process).6 F8 t/ R9 O( Y. X# F9 W- q
! W0 m; ]3 u2 O' x6 B7 R- I modelActions = new ActionGroupImpl (getZone ());
/ A' A7 r6 q' Z3 F% \3 b
) v8 l% w) ^) c- S try {
! d( R" [3 |# p- X" S9 ~ modelActions.createActionTo$message0 E0 U. s* Z& K" J
(heat, new Selector (heat.getClass (), "stepRule", false)); \6 O& T. H! f( X+ O
} catch (Exception e) {0 O7 ~9 r! K( |7 z% S
System.err.println ("Exception stepRule: " + e.getMessage ());* q) M" F5 }' w/ Y. z% t
}
' D% l0 D' r' h* C% q) h. T4 T3 A+ z- H. ^/ w2 F7 j
try {. ~# H; v6 t# {8 f. F1 V& Z6 u
Heatbug proto = (Heatbug) heatbugList.get (0); X+ {- B" c H# V, y' X
Selector sel =
3 K5 i& q3 L* G: j; @: ^ new Selector (proto.getClass (), "heatbugStep", false);# ]# @, I# a$ I5 X, s% L4 L
actionForEach =, D! o4 j6 [% u6 u# D7 b
modelActions.createFActionForEachHomogeneous$call0 l6 n' \' F5 e, Y& g1 ~3 C
(heatbugList,3 S7 g0 O/ L( U z z8 {+ t
new FCallImpl (this, proto, sel,
% X% f7 q/ L9 h! j b3 f6 M# p3 d new FArgumentsImpl (this, sel)));
3 T7 X# X. j- F L) U8 j$ q } catch (Exception e) {
% W+ Y! t: o+ c# C' v e.printStackTrace (System.err);
1 c# ^4 O8 K. o! |0 U; S }# V' T; q: c0 @; m* S4 l2 i* w
2 W. |+ ?+ W# S: r2 q syncUpdateOrder ();( P2 N. F6 h M. ?- R2 V
U5 C$ U+ p* g. S6 s" D( N
try {2 B! E. i/ v# {7 _$ U: j
modelActions.createActionTo$message
* g, h3 t0 P9 d" V4 L$ n/ H (heat, new Selector (heat.getClass (), "updateLattice", false));
5 H3 d$ {2 t0 P3 s7 x" d+ Y } catch (Exception e) {. {, P3 E4 s8 v N
System.err.println("Exception updateLattice: " + e.getMessage ());' `: T1 k! j! a1 r% Z: Q& w& P
}: y% \ Q: A! O& U
9 w' Z; |& J) ]4 l) [ // Then we create a schedule that executes the% p5 G( k w* m6 |4 J! s
// modelActions. modelActions is an ActionGroup, by itself it
% K/ ]# _4 P& P" R4 Q // has no notion of time. In order to have it executed in
! f; f2 z5 @ T0 R% P2 d) q3 J9 r& r // time, we create a Schedule that says to use the6 l! @) ^$ B o, Y( u7 S
// modelActions ActionGroup at particular times. This3 Z8 V+ w5 }" P! v$ {
// schedule has a repeat interval of 1, it will loop every
* M& q3 K& b5 d2 z$ L" n, A) W // time step. The action is executed at time 0 relative to
/ B2 x/ y" Q m( W0 q% e // the beginning of the loop.
" M; ^( O2 f" z7 s( ^* k+ i
9 J* P) V7 m/ p* s8 e( k* P // This is a simple schedule, with only one action that is
$ m9 \# k2 F* o; r // just repeated every time. See jmousetrap for more
$ Y; p0 s, m. s, S6 h0 p // complicated schedules.0 z: C' ^1 ]/ y' w1 O; v. K
- M, D5 v1 ?* O# r) v modelSchedule = new ScheduleImpl (getZone (), 1);7 N3 V( _6 j; C1 _, u
modelSchedule.at$createAction (0, modelActions);
. Z% j3 H' z, v; } - A6 j5 \5 E7 W* R' j( s4 P5 H% A- v
return this;
7 h' V. G6 l8 q } |