HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
% [1 L0 x# u. g5 O$ Z$ ?; u
1 F) G* K! L! Z; H/ V0 m public Object buildActions () {
" M' T* ~/ R. J% _0 O6 Z super.buildActions();* g7 u1 L3 ]5 H" c
. c1 u0 ~- ~6 t& F& t# J' P
// Create the list of simulation actions. We put these in
2 H# B, t1 @4 z4 w2 y8 R // an action group, because we want these actions to be
1 _" z6 b. I" Z* K, m // executed in a specific order, but these steps should
7 w* H# A3 h& g. G( D; d) e* S // take no (simulated) time. The M(foo) means "The message
+ j3 T8 w4 A( t% H/ | // called <foo>". You can send a message To a particular
' @( q- @! y4 x& u& T% P4 ~ // object, or ForEach object in a collection.. o6 K' s/ G" Q& |$ W
, t) L* k4 {! G1 u& U2 i6 J) E
// Note we update the heatspace in two phases: first run
' S. k% @! F! W- ^ // diffusion, then run "updateWorld" to actually enact the% j2 q; u3 J0 h3 O7 w3 p" T, W
// changes the heatbugs have made. The ordering here is0 }" Y2 }$ N# q- F' Y7 P/ s; S% S
// significant!
1 ~* y. _" h9 v7 Q( j# d8 r0 Y4 ~
4 X b# i2 t. e4 } // Note also, that with the additional
$ ^! B) g/ j$ z! G' q6 y$ t // `randomizeHeatbugUpdateOrder' Boolean flag we can
a. N H, c0 R7 e) W( E+ e // randomize the order in which the bugs actually run" V- {4 k6 U0 [ Z% Z6 D( m
// their step rule. This has the effect of removing any3 S0 ?* z: Y) T' |; C6 p2 R2 `7 c
// systematic bias in the iteration throught the heatbug, u* U/ j' L, s: d/ U
// list from timestep to timestep* X. [. h7 W; d: o6 t, j
( k7 O# o }3 u9 l9 W, y, Q // By default, all `createActionForEach' modelActions have) ?; I* X+ m( t8 O" v2 }3 z
// a default order of `Sequential', which means that the9 T3 `1 o$ j. f+ ?
// order of iteration through the `heatbugList' will be4 T) F' g7 O) X, T7 ~) {1 e
// identical (assuming the list order is not changed5 E7 `$ {' v# V2 ]3 m* y$ ~9 m
// indirectly by some other process).6 q1 G6 g* `# y6 Z7 } ~# t9 v
$ y# K) V; U, _% y9 X. W modelActions = new ActionGroupImpl (getZone ());3 b1 R1 g" T0 Z: }! }4 A
3 |& V1 h. \' s" p- ^* U
try {' G) ^- c/ Y7 i* }
modelActions.createActionTo$message; X S) r9 ^0 C, j
(heat, new Selector (heat.getClass (), "stepRule", false));
$ f$ b& |2 D i$ o+ o } catch (Exception e) {
! J) k' b- `! X2 F- K6 a System.err.println ("Exception stepRule: " + e.getMessage ());# a: R0 b' ?' x4 O# t/ K+ M) \
}
4 f, C( ?# g- t% W* L* _4 C
; |9 m& O" |0 J7 j try {
6 w& T* N* M s+ h+ a: j Heatbug proto = (Heatbug) heatbugList.get (0);% V% \' C2 Q$ P+ R% o3 n. o4 q' D
Selector sel =
7 T$ C% J6 c8 ~8 P) O( x new Selector (proto.getClass (), "heatbugStep", false);
/ B; b: d* H& m8 P6 g- p, Q) ^ actionForEach =! {+ R0 `; A% x: k6 X( ^
modelActions.createFActionForEachHomogeneous$call0 e9 D3 M" f3 w0 b" F
(heatbugList,
" `3 Y+ e6 v( H: ]; ^ new FCallImpl (this, proto, sel,
6 K( [* g b3 ?% m2 y new FArgumentsImpl (this, sel)));
0 G9 _" w9 c |5 m" P } catch (Exception e) {+ I. Q9 f8 V6 K/ U' c
e.printStackTrace (System.err);
* W' j, c& v6 Z: ?* B }
. {" m( w% M) ]& u: q& M$ ^5 [1 r9 d ) x7 e! A( L# j5 ~% d) R
syncUpdateOrder ();
* _, p: r& v* L9 {, m, h
! H# Q3 L! O+ f! G. Z8 q0 b try {9 ~) [- m- y" M: C" a6 t
modelActions.createActionTo$message 5 D/ k5 C% s# d5 f$ d
(heat, new Selector (heat.getClass (), "updateLattice", false)); N4 d* m5 B0 o3 X7 A; p" w/ h, H; Z' a
} catch (Exception e) {: S7 x7 ]' C3 {' b$ G: G
System.err.println("Exception updateLattice: " + e.getMessage ());
$ h i' x& m3 {2 V }0 k8 ]6 }! a2 e" U
! `/ e9 L* s4 w5 u: ] // Then we create a schedule that executes the' Y6 A+ Y3 D! a8 ]) b7 I
// modelActions. modelActions is an ActionGroup, by itself it* a* ]2 o2 H( }1 x+ u9 g, H
// has no notion of time. In order to have it executed in
2 @! V9 v% Z8 k. i* `6 p* i // time, we create a Schedule that says to use the
: I* m2 V# h- }' |# o // modelActions ActionGroup at particular times. This+ y- ]- t7 ~1 S7 Y4 I: d' a, c4 O. y
// schedule has a repeat interval of 1, it will loop every
$ {* X) v% z3 k. j5 |& h) a+ p // time step. The action is executed at time 0 relative to
7 X6 O" }& d9 ^& K9 ~ // the beginning of the loop.. w2 s/ w6 i2 l/ u
+ `% m$ V: z r! P0 ^) _
// This is a simple schedule, with only one action that is& d1 b a7 |1 {- X$ h
// just repeated every time. See jmousetrap for more
5 q0 z6 C3 J8 ^$ y3 d3 e3 d // complicated schedules.# K1 t8 C2 T% x4 Q! ~/ {5 D- q
& g$ |" ]' f, o/ ~1 e+ I modelSchedule = new ScheduleImpl (getZone (), 1);+ O+ ~/ F" z K+ @
modelSchedule.at$createAction (0, modelActions); K% o; U# V6 V+ u3 t
! X4 N9 D6 I' [8 V return this;+ |8 b; @5 }; A% e: V9 k6 C/ z
} |