HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:* w" a! \/ O x ?5 ?
5 ^6 g: Q& }& X' o
public Object buildActions () {
8 |8 x9 Q2 n) U$ U8 H: } super.buildActions();
. e) } ?* B5 W' t& e* S - M; y. [$ w7 {. e4 h5 n
// Create the list of simulation actions. We put these in1 H. z8 N. ?/ n+ [3 w* l7 t
// an action group, because we want these actions to be5 D7 T# K. s/ \# W
// executed in a specific order, but these steps should
) h9 b- x7 ]$ P# @1 y // take no (simulated) time. The M(foo) means "The message B% P& V. }+ O, v4 p/ w; G% O
// called <foo>". You can send a message To a particular7 K/ E; m" G$ H: O
// object, or ForEach object in a collection.
, y* v; V: y; b6 i/ N3 z 3 t; {7 v! c7 G; H6 {; |& Y
// Note we update the heatspace in two phases: first run
2 q' ?5 G0 ]6 b. |2 q // diffusion, then run "updateWorld" to actually enact the* }' l4 ?4 q+ `, \3 ?7 ?7 \2 l
// changes the heatbugs have made. The ordering here is
) q9 ?( B! ^8 v5 k" T1 `6 o. o0 p // significant!
5 d2 q. o6 d3 B2 O9 z 4 B4 g; i! j m, s5 D
// Note also, that with the additional
* M6 J& b* ]. F* p$ Z // `randomizeHeatbugUpdateOrder' Boolean flag we can. ^2 R! X$ A1 ~ B
// randomize the order in which the bugs actually run
G: }' G) R. n0 z' D // their step rule. This has the effect of removing any- {. y# Z* l8 v# |( ?5 b7 t: ]
// systematic bias in the iteration throught the heatbug7 J/ x5 o& M3 I7 o
// list from timestep to timestep
( [# m/ E8 ~7 @
8 x3 S7 r, F1 H // By default, all `createActionForEach' modelActions have% r$ B6 O7 b1 \+ |
// a default order of `Sequential', which means that the
. k S$ G; `* v j! s9 {/ ]9 _' e // order of iteration through the `heatbugList' will be
% ` i7 @& i7 _" t. ?' k Y // identical (assuming the list order is not changed
8 w0 c: f+ K) d$ v& O( ]6 k // indirectly by some other process).* P/ g! _0 j& g( a& ~& [! H
& ^7 b5 \, b* v! q: i modelActions = new ActionGroupImpl (getZone ());% H. V/ h' j5 n! h! X+ a5 f2 t
4 o0 _8 Z3 D# j( D/ k try {8 y1 {8 T; v. |3 u: ?- k8 [
modelActions.createActionTo$message
8 t- r$ B( \6 A1 x: l4 w' W7 c (heat, new Selector (heat.getClass (), "stepRule", false));
6 Q( }. @1 m& `7 B2 X } catch (Exception e) {! S6 G' C4 d5 R' S, @7 i
System.err.println ("Exception stepRule: " + e.getMessage ());- {: Q1 o- J! t% r% N
}8 C; s! g$ r$ `- b3 E; V
) `5 N% \# k2 e& a try {
( D5 a4 V: I! Z/ B% Z4 M Heatbug proto = (Heatbug) heatbugList.get (0);$ u" g* ~$ M( m" a. \
Selector sel =
4 l5 n$ q8 T3 u- t5 j new Selector (proto.getClass (), "heatbugStep", false);
' R+ }! G5 p1 I actionForEach =& N# N7 s- Z1 f0 b
modelActions.createFActionForEachHomogeneous$call. U5 y% a* k: f+ ^; E8 B3 z! k
(heatbugList,
! Y' m9 \* [8 \+ v3 x2 o7 D0 j) {, ^ new FCallImpl (this, proto, sel,: Y3 v3 Y- G4 n7 ?; L0 A& F
new FArgumentsImpl (this, sel)));' v8 z! m. \) w, I0 l6 ?3 l
} catch (Exception e) {
2 n, `! E1 \7 R& J f e.printStackTrace (System.err);
2 h1 P: t. Y6 a3 w }$ H# ]3 G4 Y# V- ~6 G. Z) ^! |
& b+ d% @1 [% M syncUpdateOrder ();
! [6 V7 ~- n- j% v4 g! x3 A' }
8 D. H Y8 J h" I try {* a7 Q ?& h* f9 B3 Z* I8 V# t
modelActions.createActionTo$message ) U& h8 i& ]/ C6 ~1 p
(heat, new Selector (heat.getClass (), "updateLattice", false));
0 F$ v H3 z+ f' ~4 o6 K } catch (Exception e) {/ F' F4 N5 }- m9 n( C; w8 O4 S1 o
System.err.println("Exception updateLattice: " + e.getMessage ());
6 M+ {! a$ X8 Q" M2 t }9 | U! }; A, a
O/ G- c9 b# S: g1 l: K
// Then we create a schedule that executes the
3 j/ x; W1 i5 y6 z; ~" u // modelActions. modelActions is an ActionGroup, by itself it
X" i2 m$ g8 o: k: w // has no notion of time. In order to have it executed in
$ |( g8 D, g+ t& l) l // time, we create a Schedule that says to use the( N2 M1 J4 ~2 w. E
// modelActions ActionGroup at particular times. This
! c, `6 \' h& h/ X# P // schedule has a repeat interval of 1, it will loop every
/ S3 R: U8 [) z4 ?' c0 S; q // time step. The action is executed at time 0 relative to
# h# a! l( z" \4 e // the beginning of the loop.8 |' ^4 e' e4 s3 ~! @
( y% s1 V' T2 X9 s* g2 l
// This is a simple schedule, with only one action that is
7 F6 Z* b+ b+ b // just repeated every time. See jmousetrap for more$ T) w1 s5 @8 y# Y, ~5 q7 X+ Y8 Q
// complicated schedules.
; _ b5 c5 X* c e& P 8 ~5 s- o5 b- P% @8 W/ {9 K+ Q' [& W
modelSchedule = new ScheduleImpl (getZone (), 1);
; b8 b: s* O7 L* g: a3 e, \. ^ modelSchedule.at$createAction (0, modelActions);+ e# Z4 Z% F. H4 T4 l2 q5 d
) p2 h& ^! L5 [- T* I6 E return this;
2 x" C) o: v5 x& `+ w; ]* O7 b8 D( C& s } |