HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:7 K$ d) M" L% \+ L, l
0 P! v; U& r! z4 s2 j Y# y6 K public Object buildActions () {& r1 p2 f0 g2 v
super.buildActions();' _& A# r9 E# g- O, C& B
. J n h! B5 n' @, k // Create the list of simulation actions. We put these in
& f' e) M7 ]- P' [7 O // an action group, because we want these actions to be
* I1 j m0 I, {) n% k6 E+ m5 d" b // executed in a specific order, but these steps should
# @1 @9 C' o4 ?1 O$ X // take no (simulated) time. The M(foo) means "The message
2 O% n# b2 j# `# I( Q7 ]: f% i // called <foo>". You can send a message To a particular
# r; ^$ @, V1 R+ ? // object, or ForEach object in a collection.; T6 `( o, v/ r
3 _& H/ n1 a& b3 T% y3 W u
// Note we update the heatspace in two phases: first run* ] v% T( h4 s# [0 U6 w4 ]- N/ [
// diffusion, then run "updateWorld" to actually enact the
0 _: s* S' ^! c // changes the heatbugs have made. The ordering here is
5 }; ?& o4 Y2 ?" w // significant!
" j# m$ n/ V, i5 @$ l% ^# Z
! O" Q9 y+ x0 t // Note also, that with the additional8 _1 W5 k3 a, ?. h6 h
// `randomizeHeatbugUpdateOrder' Boolean flag we can2 o" t5 E3 L) o5 R, O; L! a& s
// randomize the order in which the bugs actually run! J2 K, O! T6 L1 J. M- l
// their step rule. This has the effect of removing any
- {. Q& b3 B( r# a$ }8 Y // systematic bias in the iteration throught the heatbug0 w0 Y+ h# g$ }) ` P1 c6 r
// list from timestep to timestep
- D+ N2 ?, ~- F. [' p9 D8 S - ~- a2 j2 p. \8 v, ^+ A
// By default, all `createActionForEach' modelActions have
9 W" v/ i# U$ v: U' R1 A# @9 ~8 i // a default order of `Sequential', which means that the
0 J2 d: m2 _" C // order of iteration through the `heatbugList' will be
, W" r! l" I' Z, O0 o( j" ` // identical (assuming the list order is not changed
0 J8 l) i) ?. o5 t2 M" O // indirectly by some other process).
2 F3 X8 E* {4 Q: o# j. [. ~
5 D ^5 v" V' a! b8 W2 n) a modelActions = new ActionGroupImpl (getZone ());1 W/ q0 R3 L' s) P% a) p t
/ A" h3 J7 {6 x+ @6 V
try {
4 H4 L% J, f1 A( D modelActions.createActionTo$message
0 [% B& F; _! h: l8 | (heat, new Selector (heat.getClass (), "stepRule", false));: X" K7 y$ F4 V7 V+ z. V" v4 d
} catch (Exception e) {; n& z, B* x0 M: y# W
System.err.println ("Exception stepRule: " + e.getMessage ());
9 w% {+ i9 B& ~; G }! T- ~1 h2 P, J- y7 M; J3 `
# o/ t% ]3 B; W2 e8 g0 N
try {, R1 K- t# g% _4 C
Heatbug proto = (Heatbug) heatbugList.get (0);
$ D: z9 t% x: H6 h; z# e Selector sel =
3 f; q. ~5 N* n/ \# o5 B new Selector (proto.getClass (), "heatbugStep", false);
9 E) t/ O3 J4 k% p3 q; ^ actionForEach =, L' D5 y6 r( `1 o" ]/ n% @* b. m" y; }
modelActions.createFActionForEachHomogeneous$call
3 |4 t3 Y# h: ^& D. {4 T' S (heatbugList,
( a8 G8 J0 S0 h7 C7 m& S new FCallImpl (this, proto, sel,. a6 J" l8 n8 t' u. q1 S s1 M
new FArgumentsImpl (this, sel)));- w2 N# l6 y" t/ a- D! Q ?% ]
} catch (Exception e) {
' L9 s5 i6 _+ A* u3 X k e.printStackTrace (System.err);0 \+ v- i' X# V b- G
}
5 w* \) R/ I% ~ M" g9 V ! J8 m5 E. U- r1 @, ?1 U
syncUpdateOrder ();
9 S+ y4 X# [; d3 j B. I$ [8 r6 H0 @8 A" `9 }' R3 ^
try {
% F0 q3 [5 x: I" C. u modelActions.createActionTo$message - i" k! _' g0 i' I
(heat, new Selector (heat.getClass (), "updateLattice", false));3 j0 Z, J5 j" `: V1 r `
} catch (Exception e) {
$ I3 H, h& [+ R: [' y. x7 N; o1 j System.err.println("Exception updateLattice: " + e.getMessage ());
' z b* x& `( m }
4 J x: p& `$ k ! n( o! w7 n8 X1 }! N: K
// Then we create a schedule that executes the8 S& j3 E7 X& t/ |/ f/ ^
// modelActions. modelActions is an ActionGroup, by itself it: Z4 H! b% c4 |/ N: l+ s
// has no notion of time. In order to have it executed in- u. F) y0 A) T6 ?
// time, we create a Schedule that says to use the; K; O( v3 h; ]$ E" v
// modelActions ActionGroup at particular times. This- C# A3 L# W- O
// schedule has a repeat interval of 1, it will loop every. a9 N+ i" u4 s- T* ]
// time step. The action is executed at time 0 relative to E6 P0 x4 u. J2 I% ~; C6 j
// the beginning of the loop.
) i3 [7 b" G( i3 v: c* M$ M4 s0 U# a6 l
// This is a simple schedule, with only one action that is
( b3 M' ]% V& k* b$ S) _$ M // just repeated every time. See jmousetrap for more2 r2 x6 J, ?" g5 u/ q
// complicated schedules.' S6 i. @9 e) d# c! \
# ~ @! ?) S- O% B8 s, f. D modelSchedule = new ScheduleImpl (getZone (), 1);; e0 n1 W5 c' r' ?8 _8 o
modelSchedule.at$createAction (0, modelActions);
4 q2 g* R2 P. P" K9 }( q0 { ) a" f8 Y! f* h5 y/ Z% V' E
return this;
, _ A8 `" o, i } |