HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
6 ~7 R5 i$ n e
# j5 }+ O! @, C7 g- P& \ public Object buildActions () {
8 }/ F9 o7 B- P super.buildActions();
9 b3 C- b z! t& d8 @7 v4 r |# I$ N9 X. v1 W6 R
// Create the list of simulation actions. We put these in8 h. p2 ]/ l. z' z: K
// an action group, because we want these actions to be8 s# ?( @9 N- ~" a2 P
// executed in a specific order, but these steps should, U9 `- O2 j: a5 U9 h
// take no (simulated) time. The M(foo) means "The message2 V' ?0 `) P: V! W
// called <foo>". You can send a message To a particular+ x9 x. c6 p" J
// object, or ForEach object in a collection.
0 x% o& _. q0 E4 X ! M3 d2 s: n8 ]8 I9 ^7 i
// Note we update the heatspace in two phases: first run5 x' ^! u) P) F5 R! g
// diffusion, then run "updateWorld" to actually enact the! z7 `. J; W+ {9 @. U' T1 ~+ r
// changes the heatbugs have made. The ordering here is
7 w. _$ g+ x/ D6 J2 ~3 v6 S // significant!+ {- O$ n* g' f% O
3 z; a% {, `7 A% ]0 S% i- P // Note also, that with the additional
2 n9 M+ r( i" T% ` // `randomizeHeatbugUpdateOrder' Boolean flag we can0 j7 s) T; G) O! X( N3 V e8 t N
// randomize the order in which the bugs actually run
9 |) C/ b: G$ ?. ?7 B // their step rule. This has the effect of removing any
) w( g" s p; K5 ?1 S% v7 c+ w // systematic bias in the iteration throught the heatbug1 @. i- _! b; q* |$ R
// list from timestep to timestep5 L, ?+ K2 z$ v% O2 ^' _/ I4 M
% w1 F9 u8 x) I+ G: e // By default, all `createActionForEach' modelActions have) V* O5 E. F% Z$ s
// a default order of `Sequential', which means that the. x: Y$ t @. {
// order of iteration through the `heatbugList' will be8 F; n5 C% Y8 J! P+ P; V: ^
// identical (assuming the list order is not changed
& R8 T( \1 O5 T H // indirectly by some other process).
8 n, |% f) J2 ]1 G2 z4 d
% j0 k. y8 k/ K" l* o) X modelActions = new ActionGroupImpl (getZone ());
( M. w% o% o6 F% Y$ J* x, K% M% _% h; F% r
try {/ r( c9 O$ n) A: I# w: V
modelActions.createActionTo$message) K1 @& ? d/ V" W
(heat, new Selector (heat.getClass (), "stepRule", false));( \9 I3 K1 a( B. o) l( y$ B3 p
} catch (Exception e) {
3 ]# o6 P% O' u% v$ Y6 r! F. C6 m System.err.println ("Exception stepRule: " + e.getMessage ());
3 f# H( x! w* W }% H, [$ Z: H$ H" i O1 h
8 n A# Z' w/ K6 i8 V try {$ `( {8 f9 f! p$ h% `. J
Heatbug proto = (Heatbug) heatbugList.get (0);; u' S1 K: K- q) ^9 X
Selector sel =
# |0 r Y% q5 H new Selector (proto.getClass (), "heatbugStep", false);8 D% F* v5 L# S: m( p4 p
actionForEach =& [" z6 w7 A7 U! c7 Q
modelActions.createFActionForEachHomogeneous$call
9 Z( u! M8 o" T5 o( }: S (heatbugList,
4 E9 C' u& H) P- [2 c0 W7 E2 }2 A new FCallImpl (this, proto, sel,
- @% O, ~# I& {' d; x1 c; W new FArgumentsImpl (this, sel)));; `7 L E) }( z1 h1 Y; W
} catch (Exception e) {) ]0 J1 K2 h) s6 K
e.printStackTrace (System.err);" L1 d7 R8 y8 f6 D( R, v
}$ `7 C% q. C4 z2 f% r
2 O/ q) a6 M s! T/ g syncUpdateOrder ();" V0 U9 ^- p# F" g5 t- n5 }
( V9 C! j$ b5 y3 N+ |2 n
try {2 s7 v& k. D# X; ^9 d( ?# h' {0 i1 z( F
modelActions.createActionTo$message
# H0 t# E3 h1 h/ s" J7 t+ s1 Z8 F (heat, new Selector (heat.getClass (), "updateLattice", false));
6 U& u! L5 `- E# b0 _$ p } catch (Exception e) {
$ W3 [$ F8 X: q- f System.err.println("Exception updateLattice: " + e.getMessage ());
) R1 E% F! ~" ?9 m0 x l1 ? }6 s+ A9 A2 d8 |! |" `
% X M& {7 g: f. P3 {5 E# e p" I // Then we create a schedule that executes the
& \6 g# d6 s8 n0 i2 ?$ | // modelActions. modelActions is an ActionGroup, by itself it
( l2 n& @; {6 @1 _: E4 Q // has no notion of time. In order to have it executed in7 {6 L8 L9 l: e# \, U* E
// time, we create a Schedule that says to use the
$ ^1 f7 b* M" a6 |, T' _; b // modelActions ActionGroup at particular times. This
2 g, c( ^. @, }5 I9 j- {& P // schedule has a repeat interval of 1, it will loop every! r. U2 c$ Y9 c0 `4 Y! [
// time step. The action is executed at time 0 relative to" L7 U0 {! d$ c8 Q5 _5 V: X) V
// the beginning of the loop.
, o p9 a2 b: B+ k2 ~7 a3 t4 Z8 r6 Q# _8 [+ k9 \) c' J
// This is a simple schedule, with only one action that is
4 d4 G) S3 F* F, y) N // just repeated every time. See jmousetrap for more/ |# v+ m8 d0 `
// complicated schedules.) D% E4 L) e- X/ s4 b/ N
/ g) h- g8 k. s- @3 @9 i( v
modelSchedule = new ScheduleImpl (getZone (), 1);
* ~$ _+ J4 q5 h& b% w( L( q, u modelSchedule.at$createAction (0, modelActions);
- J/ K- `7 n& N& y
* }4 a! s; ~0 t- ` X& k return this;
: ^7 B$ B: ~# g! J2 Z2 e: } } |