HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
; i0 l$ q4 c- t# J+ l, h$ h
8 d, o i! G1 ~7 g3 r public Object buildActions () {
3 v+ A9 M; v) ^/ b: ?( E, T- N super.buildActions();. g% v4 K+ s. l9 }+ r1 C+ s
: L# m: J# T$ ]4 c, w! _& [ b // Create the list of simulation actions. We put these in
1 q- d9 k M$ \ // an action group, because we want these actions to be
) L& q. u% F: t1 E // executed in a specific order, but these steps should7 y* o) T! Z+ Z7 H) t# n
// take no (simulated) time. The M(foo) means "The message- M I5 j! p- x& }
// called <foo>". You can send a message To a particular) Z9 q% x$ `% i7 @) B& D V
// object, or ForEach object in a collection., z' J6 J5 r# ~3 U# z, r2 c
e) j6 R M3 b7 _+ ~5 P6 ^
// Note we update the heatspace in two phases: first run
4 S" X X1 B' r+ f6 N P9 a // diffusion, then run "updateWorld" to actually enact the
& h0 J- D1 g, o" ?- u // changes the heatbugs have made. The ordering here is
1 d. k# |9 ^) e4 G0 K // significant!
, g% i1 O. c6 b2 y2 {; m A p4 z . @, I4 f6 t- H+ N
// Note also, that with the additional8 N$ z6 ?' B6 [. B! S" W! {
// `randomizeHeatbugUpdateOrder' Boolean flag we can8 c' V W i" \# V. S6 I$ j9 o
// randomize the order in which the bugs actually run6 l; Q7 s- V5 H3 n% i
// their step rule. This has the effect of removing any4 T! K O! b. f. J' p
// systematic bias in the iteration throught the heatbug% N* A, z1 b% m! e
// list from timestep to timestep
' l# }( Z; E C& E9 y
4 j P0 V- q* @1 H. _ // By default, all `createActionForEach' modelActions have
4 l) A9 @3 ~5 \1 i7 n9 K // a default order of `Sequential', which means that the( h0 }5 K* `& s" B* q
// order of iteration through the `heatbugList' will be' d/ d& E1 }7 N$ S# p+ p% E0 c) c
// identical (assuming the list order is not changed
: {+ }2 ?' B) k/ D" q // indirectly by some other process).4 N+ i7 i" R. R. {- a2 j
7 j, b5 C. Y! k, M8 L& w v+ c
modelActions = new ActionGroupImpl (getZone ());7 H# j; b- ]0 v5 m0 n j0 d
8 t1 r0 `) t3 z" A0 ^) \8 R try {
! B4 B7 m c! x" O modelActions.createActionTo$message
, {7 y" c/ V& p- r (heat, new Selector (heat.getClass (), "stepRule", false));$ Z8 ]! w* L1 Z- ?% C; {
} catch (Exception e) {& m& {2 q& p, J7 c9 n
System.err.println ("Exception stepRule: " + e.getMessage ());
' H& V/ g6 k2 \+ g+ f. M( w: | }
) {8 z/ L: T* s1 \
8 A+ f1 h! G$ y4 B try { ?$ w; |8 q! X t' f4 Z
Heatbug proto = (Heatbug) heatbugList.get (0);, E/ B! T/ }5 j8 k
Selector sel =
L* x# T3 P. n/ m0 g new Selector (proto.getClass (), "heatbugStep", false);
+ G" u7 J& e2 L1 L# C) |+ u actionForEach =
% }1 l) n( B g0 T. j) c modelActions.createFActionForEachHomogeneous$call
7 G: N& p- Y; P/ o3 a/ b (heatbugList,- p+ C" x- q4 m
new FCallImpl (this, proto, sel,
* i- |# |# d( {( X; G& z) M0 o new FArgumentsImpl (this, sel)));* x/ o1 x# }6 r0 f
} catch (Exception e) {
& X3 I6 B% D5 `3 C3 h; a e.printStackTrace (System.err);
/ y; @4 d. k1 D6 Y8 ? }
E& M. a {0 F& y1 P 7 H/ y, a5 _1 L- D$ y9 c$ }
syncUpdateOrder ();- Q: g9 W4 @5 R- C, @" {$ A
+ W8 ]7 e0 q* f4 z7 @4 T
try {/ S+ h }) h. K! ^4 l1 v
modelActions.createActionTo$message
3 h4 ^; q% |: z' R5 f( E: V6 f (heat, new Selector (heat.getClass (), "updateLattice", false));0 K+ E8 A% [2 X) c- f# j3 {2 ?4 m
} catch (Exception e) {5 T* i G: I' W" w
System.err.println("Exception updateLattice: " + e.getMessage ());
) M0 M5 e) k' d$ `, p+ s( H }
3 Q5 J7 U: S9 U s* t
4 x. X3 T0 B" s+ L9 |$ \7 T7 a // Then we create a schedule that executes the
: O J. Y" w- I& ? // modelActions. modelActions is an ActionGroup, by itself it
& \6 P1 u5 v% m5 u4 K2 u, V9 m // has no notion of time. In order to have it executed in
4 j5 f. W( k, p+ s3 Z; A // time, we create a Schedule that says to use the
/ C! N0 B/ n2 k/ p3 `, ~ // modelActions ActionGroup at particular times. This
2 n9 v& S4 h! n5 ` O! |2 D // schedule has a repeat interval of 1, it will loop every, d! U/ L7 n4 H8 N* s
// time step. The action is executed at time 0 relative to. [8 |3 X( B( d3 Y& s
// the beginning of the loop.# ?. ?. G _) N& N- w
, C5 m: P6 b; Q4 V; D // This is a simple schedule, with only one action that is8 v& `) R e, C" P. e. l
// just repeated every time. See jmousetrap for more
8 B I6 k! ]/ a/ ?- ?7 z // complicated schedules.$ c8 `# b0 M) O6 f
+ R( l& R, q1 Z+ L" ?1 S# ~
modelSchedule = new ScheduleImpl (getZone (), 1); J+ Q9 C; S6 K
modelSchedule.at$createAction (0, modelActions);
, i0 J0 H3 z; A0 d ! W! I9 C2 D1 g; I
return this;/ u1 V2 T" @( W" o2 b
} |