HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
5 {) v/ a1 y0 C7 P6 H$ O6 L' A& |0 h2 {& S* I: H
public Object buildActions () {
' O% Z# P- i' `2 t% B super.buildActions();( I# k: u6 r7 c7 r) p8 c" s+ h
- ^$ w8 ~% k5 C V5 G
// Create the list of simulation actions. We put these in
8 L' T+ b5 O2 G" C8 f# l2 h // an action group, because we want these actions to be9 t! @) A/ |& k' K( o: ]
// executed in a specific order, but these steps should
- M2 E5 S( G2 Q; T // take no (simulated) time. The M(foo) means "The message* t( X9 o8 `/ @8 m3 @ g
// called <foo>". You can send a message To a particular
3 j0 m; c' N+ B* ~. G4 k // object, or ForEach object in a collection.
9 m$ S# N3 j% ~" u7 n* ?3 D7 |
& G: S) p: F: Y* w; K; j' C6 m // Note we update the heatspace in two phases: first run2 f: v( M0 {- ?7 W0 O- V* u
// diffusion, then run "updateWorld" to actually enact the! ^* _/ W" E% _9 j: F8 N# s' R$ v
// changes the heatbugs have made. The ordering here is3 m! c. s. f+ p1 p4 l [) ?2 G
// significant!
+ E" t1 F6 u% H
' Z. F' e% x: t0 C n$ ? // Note also, that with the additional
2 L o+ x, `/ C" J! V; q. S // `randomizeHeatbugUpdateOrder' Boolean flag we can
$ V* l* Q2 y, [5 j, U // randomize the order in which the bugs actually run* `0 m! v% B: S: |( }# b
// their step rule. This has the effect of removing any
; v8 g9 ~3 j- S1 ]1 L // systematic bias in the iteration throught the heatbug$ x2 N$ g8 V5 W
// list from timestep to timestep6 p9 j2 o" k1 f F0 U7 |- x
, z7 s& I( O! A N; Z+ O4 N' c/ C
// By default, all `createActionForEach' modelActions have
2 Y: T+ O- C3 b; ?3 B+ M1 U // a default order of `Sequential', which means that the$ p% ^/ S: a1 T& C5 s6 g1 M
// order of iteration through the `heatbugList' will be& Y: ]: g0 _- O) x
// identical (assuming the list order is not changed
4 c, }3 ]. j1 m6 Q8 P4 a: v. u // indirectly by some other process).; |8 o+ r3 _9 q$ H, S
, g1 ^. x8 K0 X, G' G( A' W/ } modelActions = new ActionGroupImpl (getZone ());" X! f& t; J. A! o4 u( o3 g( o8 o
( ]% G b) G: m* M try {
9 I# Q/ O; a' ]! X) b2 J) B modelActions.createActionTo$message
3 M5 H+ K* t1 y8 ~- F3 `' u( R (heat, new Selector (heat.getClass (), "stepRule", false));4 l2 P3 T$ \5 L* i: g @
} catch (Exception e) {
$ i2 R6 W$ L) h$ I0 Y System.err.println ("Exception stepRule: " + e.getMessage ());/ w5 L# m9 K0 Y9 L" J Y4 K
}
' Z6 W9 ?8 y% L, n8 j
3 A6 N& l8 v9 r try {" w7 o* _+ K' H# n( j6 X
Heatbug proto = (Heatbug) heatbugList.get (0);( ?4 d3 A1 r }( i# X; h
Selector sel =
$ m/ G9 A" f. l7 ] H" w new Selector (proto.getClass (), "heatbugStep", false);6 i1 o2 e2 p5 X
actionForEach =/ B, m. a: ?. g# w! P5 F
modelActions.createFActionForEachHomogeneous$call2 V- _6 i0 F( P b* c- I1 |6 i$ T
(heatbugList,
j1 U+ Z: ]$ T+ J( y new FCallImpl (this, proto, sel,* d/ f3 ^" M' ~/ p& J1 Y( m% ?
new FArgumentsImpl (this, sel)));
% p# t0 u. h/ V0 I& A } catch (Exception e) {
: j0 ?" L9 q5 h/ e e.printStackTrace (System.err);
: X$ S) r6 e. h* ] }
2 Q% r! ~" a; P6 {4 X2 K( @
* U* |; U' |( i- D; u# _& B2 _ syncUpdateOrder ();; O4 x5 T* E F& l: @
( i. O' `8 N9 I. e8 T5 G
try {
% p L0 o- u! i! P3 I, B8 J$ ~ modelActions.createActionTo$message
) R, q: t" L' k9 j5 C$ {4 _& o$ k (heat, new Selector (heat.getClass (), "updateLattice", false));
- b* ^; E& G3 F3 a5 I8 z+ A } catch (Exception e) {" c, L1 ~" u+ o; [( h$ m
System.err.println("Exception updateLattice: " + e.getMessage ());
; s; n/ @- j. N+ Q6 R }: e+ }+ W: r: K9 U3 s; J
0 o: z3 H* n" E7 b F6 s
// Then we create a schedule that executes the
T1 J4 c; a3 o4 w1 v; |9 K // modelActions. modelActions is an ActionGroup, by itself it
, \# N/ _/ }$ q6 n4 \4 Y // has no notion of time. In order to have it executed in+ R$ B0 f w; y; ]) T3 e
// time, we create a Schedule that says to use the8 K7 y% J7 P* z) ]4 e# p: u
// modelActions ActionGroup at particular times. This, {' N7 R3 E" X$ ^
// schedule has a repeat interval of 1, it will loop every# |( i# v# Z. k: N2 F* E
// time step. The action is executed at time 0 relative to
7 I1 \, T1 d9 M8 w @) L5 T/ G( j // the beginning of the loop.' h3 Q3 U0 @9 `* P
% \ V/ b1 y; Z // This is a simple schedule, with only one action that is, ]1 s! _: v4 F2 N
// just repeated every time. See jmousetrap for more
4 w7 w( Y8 x' g9 ]' a+ a // complicated schedules.6 Q6 g( g' X) i$ A
. Q. {* Q* B3 m% Q( u
modelSchedule = new ScheduleImpl (getZone (), 1);9 A9 _2 ~* y; X
modelSchedule.at$createAction (0, modelActions);
- k+ ]* @7 H9 p5 m1 H& ^* W $ H- V' j: T. E
return this;
. r) d& G+ |* N5 m% ^6 L. l6 b s' { } |