HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
* `5 ] ~" x! L6 {# C6 ?5 A: r: w1 A$ V7 E
public Object buildActions () {6 E$ J% u n0 M3 B0 t8 ~
super.buildActions();. w5 w3 s! ?. d9 m9 ~1 k! [ K
- R T0 } ]0 V% r1 g8 i) R // Create the list of simulation actions. We put these in
F# _1 O; V8 a O+ A* q // an action group, because we want these actions to be
3 v. n6 Z- ], r5 p9 y // executed in a specific order, but these steps should
. I3 ]5 Q5 q( a // take no (simulated) time. The M(foo) means "The message9 K) s5 h5 ] n# i6 \
// called <foo>". You can send a message To a particular) ^0 Y3 k- v {5 T& a
// object, or ForEach object in a collection.
, X4 G' F" B, P
4 @2 Z& b8 a1 f% [ // Note we update the heatspace in two phases: first run0 R' ~8 s- s; A
// diffusion, then run "updateWorld" to actually enact the
- l7 b9 r* |' }2 m1 R+ o5 L // changes the heatbugs have made. The ordering here is& Z4 C y; D8 I! G- r
// significant!
% _) W% [, g" w; m' I % C5 B2 M- t! B( }
// Note also, that with the additional
7 a4 u# F) J. p; s# m8 u, u- Q2 `4 @ // `randomizeHeatbugUpdateOrder' Boolean flag we can( p. |) R, A# N& B
// randomize the order in which the bugs actually run0 O, M2 `. k# z) O9 d
// their step rule. This has the effect of removing any
. d. e3 F0 [; k6 r // systematic bias in the iteration throught the heatbug
' o8 m6 Q! }& m7 A: Y$ G/ A // list from timestep to timestep
0 u$ {9 J& U# i0 L
$ T8 n1 S+ t R" u7 e // By default, all `createActionForEach' modelActions have7 x7 Z* @, K% R( N, c) x
// a default order of `Sequential', which means that the
8 I6 q7 l2 {5 n; \0 o$ O // order of iteration through the `heatbugList' will be
4 d7 K% t) `6 h' Y, e // identical (assuming the list order is not changed
; Q& p1 q% t4 |! ~% z- T0 h // indirectly by some other process).
( I& `% C3 H+ M6 b0 ?5 P9 _2 Q
8 L/ ?0 K$ C) \* w modelActions = new ActionGroupImpl (getZone ());
8 W$ X1 h/ u3 ?
' }0 Y3 b! z5 d1 Q8 B5 U1 b try {
1 E& V+ P. Q: z$ I modelActions.createActionTo$message
3 e2 q R, Z2 ?3 j (heat, new Selector (heat.getClass (), "stepRule", false));
9 f( e; P( [6 B! q } catch (Exception e) {$ T1 s3 W" Z+ i2 W1 ?# G$ ]. |
System.err.println ("Exception stepRule: " + e.getMessage ());- Q1 ~6 M6 u8 Q6 S; n
}% v5 Y+ c X" A7 c
; X$ D8 w7 m* v6 {* y# c3 w, e
try {) _3 @8 J$ j( t, `8 D
Heatbug proto = (Heatbug) heatbugList.get (0);
4 N. I& x* r3 \2 m* @* H Selector sel = * C1 [+ m |+ A( `: T, C' z w
new Selector (proto.getClass (), "heatbugStep", false);0 v4 p$ l1 U7 e% ~/ e# e
actionForEach =
7 E- h8 c, P2 u+ a+ b! B0 Z! m modelActions.createFActionForEachHomogeneous$call* R/ O, h: l8 _
(heatbugList,3 h! L9 P" N; k; G
new FCallImpl (this, proto, sel," N$ D8 } w5 J. Z( f/ p( d
new FArgumentsImpl (this, sel)));
% k' D, F9 w+ Q' o0 d' K } catch (Exception e) {
: G3 [1 h3 B! l; F) d5 { e.printStackTrace (System.err);
, V& n/ y. |, M* |1 }2 q, d Z/ ?! w }* e' d- E1 C# P' t5 [1 y7 {% t9 ^
% K/ L% z" A) i8 h
syncUpdateOrder ();
1 \) g1 l' o5 D& t) V1 Z, Q# [' G N% X7 l; v: T; M7 T+ U5 f
try {
7 ]# g- f- ^& K- X- K7 M; x modelActions.createActionTo$message % B) N. X6 v+ _* ]
(heat, new Selector (heat.getClass (), "updateLattice", false));
0 ^/ \% `! p, o" w& g( p% d } catch (Exception e) {3 M. C& F6 W+ [9 `
System.err.println("Exception updateLattice: " + e.getMessage ());$ L7 m9 M* S# {: d, }
}
! n3 {+ h$ {) G+ n( S
4 s' R% a2 w$ l( c- [7 I a // Then we create a schedule that executes the6 z" [9 V7 E& x6 H/ r% W
// modelActions. modelActions is an ActionGroup, by itself it! N+ ], e9 Q$ T6 Q
// has no notion of time. In order to have it executed in
8 _8 j8 I/ k. F k5 A // time, we create a Schedule that says to use the
) S% S' ~' F% b. f // modelActions ActionGroup at particular times. This
1 ^9 t7 R: {: b$ B! Q* O5 u // schedule has a repeat interval of 1, it will loop every
8 m9 d/ T( ]- s2 w" S" ] // time step. The action is executed at time 0 relative to
: T6 ~, `- T: h! Y* G. u! }4 f2 F // the beginning of the loop.
7 E+ O4 |5 W* b0 X' g5 ]- B" B# K3 S- g8 s6 V* _1 {3 F
// This is a simple schedule, with only one action that is# P3 D# Y2 p2 G7 P0 ^1 Y, w4 _% p
// just repeated every time. See jmousetrap for more) B* q, V% `- ^6 Y+ ^+ R
// complicated schedules.
/ C1 ]% r6 I3 O1 q
. J5 R4 {6 `' i1 b) v4 g1 E. i modelSchedule = new ScheduleImpl (getZone (), 1);
5 f5 k c1 s2 n3 a5 B modelSchedule.at$createAction (0, modelActions);5 m. q; J5 I" g' R& l* P$ z5 J: k, p
, E: V; c. T2 H- x
return this;, C0 y5 K5 T3 e( u8 n
} |