HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
% N _3 |) R; H3 ]4 w1 }& i$ B2 P/ Y$ R k5 u! d+ J5 T
public Object buildActions () {
, ]2 _7 J$ K$ c1 ~; ]0 n super.buildActions();
j: O$ ?5 H1 @- ~" [+ H; q 2 h4 ]8 E- n9 y
// Create the list of simulation actions. We put these in/ A; T3 L+ \8 X5 V. c
// an action group, because we want these actions to be8 E- x" Y6 j- x) ^, V
// executed in a specific order, but these steps should
. C: l. i& V8 U, G' X" F // take no (simulated) time. The M(foo) means "The message* K$ O, k; J. b2 q
// called <foo>". You can send a message To a particular
- c% Z+ B( N# B; a' P. P // object, or ForEach object in a collection.! ^4 v" R p3 Y) p
A6 ~5 A8 I9 @; Z, a, b2 l // Note we update the heatspace in two phases: first run! T5 @5 e0 h" E* V6 f
// diffusion, then run "updateWorld" to actually enact the) z4 v- s k7 V! q* x
// changes the heatbugs have made. The ordering here is
3 s3 K7 J( H6 U- j! ]5 @ // significant!
) h+ H9 y' k. L, Z% K5 t $ g! {3 L7 s) n4 M
// Note also, that with the additional
# D5 g7 E! h+ X& w6 n) s // `randomizeHeatbugUpdateOrder' Boolean flag we can
' y4 Q7 I9 n# N# V! f // randomize the order in which the bugs actually run6 d. j# {# |" o1 ]
// their step rule. This has the effect of removing any6 ?' [* I! G9 ~! |5 m8 d# @
// systematic bias in the iteration throught the heatbug8 u6 a$ h& y" R& F
// list from timestep to timestep' B# s# Z0 m$ Z. i& Y
" F1 k! x% q0 [: c2 Z* s6 g; ?1 Z5 n
// By default, all `createActionForEach' modelActions have
: g+ U, e7 ]. @8 E1 _5 d // a default order of `Sequential', which means that the
2 M. p; f9 |1 M: D // order of iteration through the `heatbugList' will be" R1 o: J' [- I0 W% d, D
// identical (assuming the list order is not changed
( i0 o7 h) V9 d* |7 Y% } // indirectly by some other process).
7 Z+ b2 r: g$ w9 e6 n 4 q5 c1 g& e0 x1 f$ K6 M( n& q
modelActions = new ActionGroupImpl (getZone ());
$ y. U- L& }; T+ B" \& _2 M/ L) B+ e. U6 V
try {/ `% Z2 j- _/ q
modelActions.createActionTo$message# z+ F+ Z9 [# q% ^* z/ s; P
(heat, new Selector (heat.getClass (), "stepRule", false));& y7 ?( z' E6 s8 B' j
} catch (Exception e) {
3 H) f+ v' A" I( O3 l1 w% H, O; @ System.err.println ("Exception stepRule: " + e.getMessage ());
5 x) _! X# b& K3 p3 K }! e; P: ]0 l' @- h' e, J+ y+ P
( o* q* m1 I9 v9 @3 u
try {
4 S% c" X0 q- M. t ?; E2 X0 ~ Heatbug proto = (Heatbug) heatbugList.get (0);
( O- R9 i5 M+ k Selector sel =
' D0 y) S* r0 E7 a( }" n/ q1 g* Y new Selector (proto.getClass (), "heatbugStep", false);
8 e) P0 {' R& Q7 u actionForEach =; y: O, n/ a2 j* D3 a) g. K. p
modelActions.createFActionForEachHomogeneous$call
9 Y+ O0 S# d8 H/ a1 K0 u (heatbugList,% W; h- Y3 p1 x. A8 F4 }
new FCallImpl (this, proto, sel,2 u9 V4 o1 U5 v" w
new FArgumentsImpl (this, sel)));
: t, J. W9 k2 F. ^' } } catch (Exception e) {: M: m- \, ]( |) y3 J' ~- v" w; a* Q
e.printStackTrace (System.err);
) }+ C$ {% n }5 d# v }, E7 S! @( {4 }% e! R
4 Z$ e" | k6 }* \! W) V* |4 e syncUpdateOrder ();
Y3 j, X5 w! t% L# b, a7 g. M4 z) n$ @1 S5 K) i: u! Q) G+ A! a
try {: Y C5 o" m6 j5 O
modelActions.createActionTo$message 7 X2 W2 y9 l3 @0 {9 ]* H
(heat, new Selector (heat.getClass (), "updateLattice", false));$ r9 @9 L6 d9 p
} catch (Exception e) {
9 j: p- V7 ]) X( x5 |2 e System.err.println("Exception updateLattice: " + e.getMessage ());$ M7 R, ^2 ?' |# `, H+ ^3 [
}
+ \2 `% K# o* n E4 D& B! H9 g% i
& X6 A% `2 _& {, b) z, Z/ c { // Then we create a schedule that executes the& O& }8 B* o/ a0 ?8 ]0 _
// modelActions. modelActions is an ActionGroup, by itself it9 L( \, t* c z+ s8 M/ i
// has no notion of time. In order to have it executed in: R% X( e6 f$ l R( c$ [
// time, we create a Schedule that says to use the
! D5 A( ]+ c' @! h2 o7 S$ Z# o3 Y // modelActions ActionGroup at particular times. This! l2 [, ]% s) Z; r. i" V
// schedule has a repeat interval of 1, it will loop every
2 z2 Q4 _4 a" Z' R+ v/ N. _ // time step. The action is executed at time 0 relative to. @/ q) }+ k2 y& W
// the beginning of the loop.0 H+ `8 W2 U1 n+ F* V
+ B) a7 z, d$ Q+ \! X6 e
// This is a simple schedule, with only one action that is
; f) r* o/ V6 }; p. T // just repeated every time. See jmousetrap for more [% c+ D# q" z/ D" @7 Q
// complicated schedules.
6 ~2 p9 m: I. K
' r1 Q- ~+ R( H4 d7 d9 u6 b! ~9 \# W modelSchedule = new ScheduleImpl (getZone (), 1);: P# L. T/ S* E9 E9 E& G
modelSchedule.at$createAction (0, modelActions);
! J) h' M& O4 }; v9 @7 F
3 d, n. c$ p- O return this;
7 r% c4 v+ W) v6 E8 [ } |