HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
' O' I7 k4 a7 J( \1 d/ @( \5 l. M9 t
+ i+ j5 s' Y* U0 x. h) G public Object buildActions () {! @9 B x4 h! R1 D! Y
super.buildActions();$ R& |1 _4 S' A- q" i4 B. {
( ~3 b6 S3 }1 a
// Create the list of simulation actions. We put these in
. y, \) S1 h$ _. U. J // an action group, because we want these actions to be
1 Q' j$ T$ q3 Q; w7 s // executed in a specific order, but these steps should/ a! Y& t$ s) I
// take no (simulated) time. The M(foo) means "The message
: I* v% S" s7 b // called <foo>". You can send a message To a particular2 t" b' Y$ q2 Y, ^0 |- @
// object, or ForEach object in a collection.& k9 k+ I) P1 x9 K2 i& S+ I6 B! `. `
( E' g1 l4 h: r0 M6 w2 c S: q
// Note we update the heatspace in two phases: first run
/ h0 G2 M& s6 E# r3 B+ a# h // diffusion, then run "updateWorld" to actually enact the
8 p( p4 B; ^# N. g( l // changes the heatbugs have made. The ordering here is% ]: j5 ~( L$ w( I
// significant!: S: b# d; h' t N/ k1 `6 Y( |* Q9 D
- A. t/ O q' x. k" V
// Note also, that with the additional
$ j! T5 q; Z9 }* ` // `randomizeHeatbugUpdateOrder' Boolean flag we can
2 t- T3 u, e9 C // randomize the order in which the bugs actually run
5 \$ Z' e$ X( P0 x. a // their step rule. This has the effect of removing any
6 _ n( `9 M9 U$ b% ^3 Q$ [5 F // systematic bias in the iteration throught the heatbug
* C% U ?4 o8 J4 U: D, G // list from timestep to timestep
$ h+ a% y# X* ^6 J2 [7 B X6 ? B 0 o# f/ c X# ~% q8 b
// By default, all `createActionForEach' modelActions have
4 t' e8 {, P, e // a default order of `Sequential', which means that the
0 K1 o$ j/ [: `4 T. U f // order of iteration through the `heatbugList' will be5 z0 k) S' Y7 J
// identical (assuming the list order is not changed0 ?. u" r) m" _6 H2 I1 U
// indirectly by some other process).4 b# t. p C1 t) n) |0 T2 m
0 b3 d1 h; }) R' j modelActions = new ActionGroupImpl (getZone ()); I: E1 O* I/ z8 [, m8 o6 p* j
& s) A* V( e$ z8 d' C
try {" N2 ^" q3 l! r6 ^# u7 r# R3 i
modelActions.createActionTo$message
3 r0 \! a& K, p' I; ^& J" V. N$ S4 o* ~- x (heat, new Selector (heat.getClass (), "stepRule", false));
5 H+ s+ [4 C3 K( s0 x7 G } catch (Exception e) {3 X( k3 V+ d2 O
System.err.println ("Exception stepRule: " + e.getMessage ());
9 ]9 C( ?" x! r- l9 d1 l, ~: S# H }- N# g9 q4 B. C+ c: a
+ b4 n6 S2 v/ e" K, X try {
0 H& c: U8 v& p Heatbug proto = (Heatbug) heatbugList.get (0);: z1 H& T* ?) ?1 ]$ O/ T
Selector sel = ; S! f3 z. g2 Q. s( E
new Selector (proto.getClass (), "heatbugStep", false);+ e9 d; q4 q' i8 B+ R' U
actionForEach =
/ ]7 _; U, D' k+ h' ]$ D modelActions.createFActionForEachHomogeneous$call
z: B( f7 _* Y# P$ r (heatbugList,7 d7 b1 F2 Q- Q7 b# ?
new FCallImpl (this, proto, sel,* v: N# m/ H( H4 O
new FArgumentsImpl (this, sel)));
( t0 r, z, j( Y/ o9 A } catch (Exception e) {
4 t/ N3 q' l3 a# \0 {+ r0 L e.printStackTrace (System.err);
! i7 Z1 Q( e8 ~- x* s8 J/ H( D4 y! Z }& o1 P9 K) a4 J/ I) c* v( q
1 g, |- s$ Z; a/ X) Z3 k syncUpdateOrder (); h; q* D- w& i4 i
0 L& h' w4 {6 Y
try {
2 D7 w+ H! |- b$ ^ modelActions.createActionTo$message 3 o) I0 [: j4 `/ e
(heat, new Selector (heat.getClass (), "updateLattice", false));0 E" e2 [# b! K
} catch (Exception e) {
/ a1 n7 d# H2 c1 F System.err.println("Exception updateLattice: " + e.getMessage ());& }! a4 D8 k" H3 ^0 o
}2 c0 m8 `+ s, G3 t) @
+ s# O8 F% L5 L4 [) v4 Q
// Then we create a schedule that executes the
* ~- o2 a6 D+ H6 j6 B" M // modelActions. modelActions is an ActionGroup, by itself it
, c, g g, J3 B6 n% p" W0 g // has no notion of time. In order to have it executed in% `( Q+ j: @6 W" ?6 `: y
// time, we create a Schedule that says to use the
8 x5 S t! W& q: |9 y# O1 P // modelActions ActionGroup at particular times. This
6 q3 ]" c" D2 a k, u' D; E! t9 L // schedule has a repeat interval of 1, it will loop every
) G0 ]& z% v. {5 v V // time step. The action is executed at time 0 relative to
0 V$ P2 [! j1 n // the beginning of the loop.
2 T0 e) |' k/ l* D! E5 c) p
$ |8 U, [0 ]. o b/ I2 W+ ^ // This is a simple schedule, with only one action that is
& F5 F: {) y* t7 x // just repeated every time. See jmousetrap for more( p3 h6 e' M5 ?$ s
// complicated schedules.6 l/ S9 ~* ]6 K, M( J0 l! ]3 r9 r& a
5 K3 a, L) ~. q1 b modelSchedule = new ScheduleImpl (getZone (), 1);' R0 m7 r$ `1 i, b# Y& [
modelSchedule.at$createAction (0, modelActions);
: O% u0 V! W' p8 D: t ) M; e) }* v2 ?" |+ `! V9 s% `
return this;9 Z( d# F0 Q3 H0 O6 Q
} |