HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:1 s5 N- _- M/ y. k0 P6 V% S
7 ~/ R) [$ Q3 | public Object buildActions () {! q) o0 i& \+ U) I" p: J7 J" e0 B
super.buildActions();
( R2 ?$ x% ] N4 c8 Y3 A 6 S3 [( \1 V# Z. g
// Create the list of simulation actions. We put these in
3 Z( Q& u6 Z! N" n4 G$ [ // an action group, because we want these actions to be
# k% q6 j! F( q6 K; a5 W& K // executed in a specific order, but these steps should
6 R8 `( V2 k$ [4 D& B) q- P" C+ a // take no (simulated) time. The M(foo) means "The message$ e5 T1 n! Z+ o1 ]) S! \' J
// called <foo>". You can send a message To a particular
) J }4 [4 v7 t2 ]7 ]& E# Q+ } // object, or ForEach object in a collection.
- i Q m: F# d8 t# b' I f* l& X; b; q- L. B, x( }
// Note we update the heatspace in two phases: first run
# {( b6 B9 b" P& K3 x0 ?) _. } // diffusion, then run "updateWorld" to actually enact the5 b7 N5 \' ~( a( u
// changes the heatbugs have made. The ordering here is5 d5 y1 X) |+ Z% `% s i4 L
// significant!
^5 N& w) b3 h4 a8 | $ @* u" o/ j2 U5 I: M
// Note also, that with the additional. s: i! Z; W/ s" @' i2 l: c+ f
// `randomizeHeatbugUpdateOrder' Boolean flag we can# E: b K/ ^8 [/ m9 I4 f
// randomize the order in which the bugs actually run
. C9 K3 X+ J/ R; {& ~) S // their step rule. This has the effect of removing any% ^6 D) C0 s2 f0 u. j
// systematic bias in the iteration throught the heatbug" j# h1 `( v( F, l# l
// list from timestep to timestep
9 c2 S$ m. U) Q- y& i& w% C
4 R( `* Z5 {( I5 N, H* |5 @ // By default, all `createActionForEach' modelActions have
; W' S5 `- |2 y% r" n+ ?7 n // a default order of `Sequential', which means that the L! r. \+ a' J! p8 J2 K
// order of iteration through the `heatbugList' will be/ ?- X8 V$ ?8 [0 b6 w" y
// identical (assuming the list order is not changed& ` ~0 }( W7 {4 [$ T6 ~( s
// indirectly by some other process).
/ ~. p7 Y$ j5 k& c" Q: _/ B z9 l2 L
, `" R" n+ E/ P/ q1 @! y modelActions = new ActionGroupImpl (getZone ());! l0 } [; C; E1 ^! C* F+ P
' F/ X0 p6 [. c
try {2 E: |; ?. F" L, E0 O
modelActions.createActionTo$message U1 F) e% u) E7 W+ n
(heat, new Selector (heat.getClass (), "stepRule", false));: ` }# q5 h) }9 i. t1 W! {
} catch (Exception e) {
3 ^* y2 J/ S. S8 b0 E1 t System.err.println ("Exception stepRule: " + e.getMessage ()); N, m- c9 E$ E9 ?( W
}. x. j) G% e" @9 l0 u
s: z0 l! j; d try {
, f! L! w# {0 D" L3 C3 c Heatbug proto = (Heatbug) heatbugList.get (0);
5 ?) @; ~" M" }& b9 y Selector sel =
, ]! L9 t- I* a7 q- I new Selector (proto.getClass (), "heatbugStep", false);6 B2 `6 q! H" M0 h; x3 H8 Q
actionForEach =
3 J+ j% l8 \$ } t modelActions.createFActionForEachHomogeneous$call8 v3 Z: d0 v* q) C
(heatbugList,' M8 N% M, p4 b1 g N2 }0 A
new FCallImpl (this, proto, sel,; N+ ]7 N- N& |, c
new FArgumentsImpl (this, sel)));/ A+ K0 O; J' L" R! x F- E
} catch (Exception e) {
, b! y0 u: k( z* ` e.printStackTrace (System.err);
2 h+ C( R" C0 l8 K" b3 d }: A5 A6 n: b* n# x) Y: l W. R& Z
4 L( w* T/ p7 P# q( c0 _
syncUpdateOrder ();
. C4 L, a: g2 O. O1 K- Z, e. q4 x+ ^% i2 e/ w7 {
try {
3 U `5 w7 h# s! o modelActions.createActionTo$message * v6 \0 l7 Q/ b" L3 |' a
(heat, new Selector (heat.getClass (), "updateLattice", false));
5 A9 \$ A( j, I8 I# H } catch (Exception e) {
0 f. j; \! h/ s: Y9 p8 e8 P System.err.println("Exception updateLattice: " + e.getMessage ());
, y. F( N. ]) V! W! K }5 K& v* D4 S9 ?3 A/ D! y ^. q
. c; }* p9 `+ }& |: i1 F* \) P' E // Then we create a schedule that executes the: _5 C- p7 V6 ?1 b5 m
// modelActions. modelActions is an ActionGroup, by itself it
9 ^% z* n% O8 R // has no notion of time. In order to have it executed in7 J8 C/ k9 ~5 c% f) i2 ]
// time, we create a Schedule that says to use the# o3 C- o% G, L% a
// modelActions ActionGroup at particular times. This# f5 _& h3 u) R0 u1 s# ~. O
// schedule has a repeat interval of 1, it will loop every
7 e+ P! C, j. Q4 N* B! l. R // time step. The action is executed at time 0 relative to
" O+ c, x9 I7 p& e$ z // the beginning of the loop.
) g* x- D2 G% l9 G- a/ ?# ]7 M# t0 P8 o* }% ?: w
// This is a simple schedule, with only one action that is
. R2 R" N3 d; z [* E // just repeated every time. See jmousetrap for more
, k5 C; y9 }) J" g9 d. o$ e- X# M // complicated schedules.
' S% o' Y/ T" W' G4 U& m& p B + p5 q7 o; j& ~" n2 o& S/ B
modelSchedule = new ScheduleImpl (getZone (), 1);
: ~* N' ?- e% e0 {* h! l# k3 I modelSchedule.at$createAction (0, modelActions);
6 M& j3 X1 L5 G3 T9 t & w1 y1 n! ^% j! ?3 f/ n5 {
return this;
; Y% G2 ^, P1 e# y c h7 Q } |