HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:8 x. L. P3 ~+ G* _% i4 @! `( W3 ]
9 T9 n1 K7 D$ K! _4 t public Object buildActions () {8 _7 j; _9 o }* O9 G
super.buildActions();
* R# J8 O. O' A% l9 C
7 W# S+ F8 Q4 U" K7 s' ~" L // Create the list of simulation actions. We put these in. w. ^ \4 W, q& A' v9 _
// an action group, because we want these actions to be2 k3 `1 f+ I2 M0 V! t% n( O2 w, C, ?
// executed in a specific order, but these steps should
+ H+ Y) \0 G* P; S' c+ y, s1 y/ M2 \ // take no (simulated) time. The M(foo) means "The message/ r" \5 J- Q: B( b3 l4 E
// called <foo>". You can send a message To a particular3 b* g% c; U! s# L5 i5 L) L
// object, or ForEach object in a collection.' H0 }4 N! u* U7 N, z, T
% N! ^6 m8 Z$ x2 y3 z
// Note we update the heatspace in two phases: first run
) M/ p& ]% y1 f6 t // diffusion, then run "updateWorld" to actually enact the
# s% o- O- L& B // changes the heatbugs have made. The ordering here is
$ \4 b# }0 ]9 x/ j/ a7 @( |* L# [ // significant!
" J( K- q9 d0 N4 @
# t0 T$ s- W% s" |3 @0 ~ // Note also, that with the additional* s q8 A2 T) T' C
// `randomizeHeatbugUpdateOrder' Boolean flag we can* V' q. N9 e7 ~+ i6 u4 a5 V2 F
// randomize the order in which the bugs actually run
% }, Z4 c, v; K% o: N) h // their step rule. This has the effect of removing any
; f# q& O% o& m0 O) `; }/ S _ // systematic bias in the iteration throught the heatbug+ t8 n) n* u! I( C4 i
// list from timestep to timestep z( R: k) m8 F
2 f( e0 Y2 h* ?- o // By default, all `createActionForEach' modelActions have
- @# i0 ~4 s1 U% H+ C // a default order of `Sequential', which means that the3 L6 a* P2 ^2 ]3 B
// order of iteration through the `heatbugList' will be
8 b4 b; w6 T- K( `% |! U3 C // identical (assuming the list order is not changed
2 ~( l" O1 b2 Y) A; P% d" w // indirectly by some other process).7 d; G9 h3 a# W( Y2 P
) f6 A2 T" C, }9 U9 w modelActions = new ActionGroupImpl (getZone ());
4 q- M% } g3 n7 _5 t
! P1 a8 T; Y% B F6 k# L- ~0 Y try {5 t: ^* j+ Y8 l6 ~+ @, `2 h
modelActions.createActionTo$message! q: e+ w( J B7 I8 l# F
(heat, new Selector (heat.getClass (), "stepRule", false));: w1 c1 {6 Q/ b3 m5 X1 N- N8 m
} catch (Exception e) {. Z f; V* [! w
System.err.println ("Exception stepRule: " + e.getMessage ());: o: }4 {$ y' o( B: v
}
9 \: {) i" a% l1 s- X) d
& D! |8 a" |1 V8 F try {
) L9 D% f# }8 d. R5 X Heatbug proto = (Heatbug) heatbugList.get (0);9 F+ }% y" `7 G* @2 A
Selector sel = 4 n! p: `1 d- b: K7 r
new Selector (proto.getClass (), "heatbugStep", false);
: K8 C( s5 T' `, r2 [5 N$ ? actionForEach =
$ {2 F: o- `) x0 n# ^% u% n+ N2 V modelActions.createFActionForEachHomogeneous$call, W4 y7 q) D' W- ^
(heatbugList,8 M7 j- S3 j% O7 G
new FCallImpl (this, proto, sel,
& \* j) E9 J, P+ P5 Y8 f, k new FArgumentsImpl (this, sel)));
% B/ p3 |- T$ M } catch (Exception e) {4 l0 H- X2 R' ]+ v& S
e.printStackTrace (System.err);7 \1 g# d& t# l4 V
}; ^! a0 h; |5 X) Y$ M2 B" D
+ k7 P7 u5 B! E K7 |; ]' p7 X
syncUpdateOrder ();' }' `4 ]' A) Q7 `$ b; @
0 g7 H0 q) o$ I
try {
) {+ ?" U! N1 p, E modelActions.createActionTo$message $ \5 N* ?. E. X
(heat, new Selector (heat.getClass (), "updateLattice", false));' d2 O. O- U0 }7 g% z! i
} catch (Exception e) {0 z. n2 ^5 n' x7 m' g6 X' t3 e
System.err.println("Exception updateLattice: " + e.getMessage ());
+ @( F4 N: V* ]% n5 x- N }) R, x/ D7 k) l7 w* y- C; o5 m
. ?6 b+ Y5 B1 ^7 s
// Then we create a schedule that executes the% I2 I3 R2 F3 K# v4 u
// modelActions. modelActions is an ActionGroup, by itself it5 _+ Z$ C5 \6 }3 l W' w) P2 @
// has no notion of time. In order to have it executed in% G: C! f4 H5 `
// time, we create a Schedule that says to use the
3 j! y2 P) h, a8 c- |8 ~5 o // modelActions ActionGroup at particular times. This
# M) ?3 c/ A/ Q3 D. B // schedule has a repeat interval of 1, it will loop every5 _8 I6 _/ R ^4 f% y2 w$ `
// time step. The action is executed at time 0 relative to
, g- o/ L5 ^6 c' \* ] // the beginning of the loop.
c) R+ r q" a ?# n0 j& F* j7 n7 G% ?% Y; i6 o
// This is a simple schedule, with only one action that is- r# h$ J! o" g) k9 k; x* e
// just repeated every time. See jmousetrap for more
2 a; c7 q% E( F+ t% O // complicated schedules.9 _4 L: c$ _0 I" U
6 H' H* G8 M* L
modelSchedule = new ScheduleImpl (getZone (), 1);5 n* h8 f2 W4 a: U9 N7 p: @
modelSchedule.at$createAction (0, modelActions);
2 Q6 |# |8 J {3 F" J1 u: y
" k) |2 h" ]. T; x& ` return this;8 c5 P2 w, ^) n$ q* M
} |