HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
) a& F) T, f4 O0 c8 w w D$ x
8 a3 J$ Q( }+ f public Object buildActions () {
3 V/ e; V2 Z) d2 i" E super.buildActions(); R1 G+ U5 x: U6 i
8 A* w) b9 q5 N7 R
// Create the list of simulation actions. We put these in! S# B1 z' f6 ?+ `& W7 ?7 q
// an action group, because we want these actions to be. I p& u7 W) |* R
// executed in a specific order, but these steps should$ Z' j" O- G* z7 V
// take no (simulated) time. The M(foo) means "The message8 x& T4 h& f- a. I+ J4 g8 ^& W
// called <foo>". You can send a message To a particular# G q2 W m7 p
// object, or ForEach object in a collection.
4 Z& K3 T" ?/ X x( g0 B * {8 M! W' H0 ~% v. ~
// Note we update the heatspace in two phases: first run: w4 U# r8 j4 A' ^& p/ m0 e
// diffusion, then run "updateWorld" to actually enact the% |4 ]# i7 V, _; \; a3 I! N
// changes the heatbugs have made. The ordering here is
/ W+ o8 ]2 R3 w9 J, e! {' B! @: w // significant!+ V4 g* X# {/ q' p+ K7 ~" V
4 p8 u$ Y/ w' p3 q& L& `
// Note also, that with the additional
1 Z/ I, ]8 v) h9 F8 | // `randomizeHeatbugUpdateOrder' Boolean flag we can
9 r, q+ L* Z' e // randomize the order in which the bugs actually run
8 Y: o' L- c5 z0 g2 A9 | // their step rule. This has the effect of removing any
9 c2 H" i1 W F! y! n$ T // systematic bias in the iteration throught the heatbug5 e7 b( G0 ]3 H: O& x" w
// list from timestep to timestep1 N5 o" b% }, N8 u! N4 e
7 m" `; x5 [1 R+ G
// By default, all `createActionForEach' modelActions have5 A" ?2 ^) y; Q) [9 Q6 ^
// a default order of `Sequential', which means that the
3 n/ {$ _5 _2 J3 \ // order of iteration through the `heatbugList' will be {: A, S$ | R$ r
// identical (assuming the list order is not changed
. r$ H* J* p+ r5 ]% r6 [ // indirectly by some other process).- ?/ Q; b% ^% t' q1 D4 _
! `" f& J! i; G# S, L9 {; A/ k" M- m
modelActions = new ActionGroupImpl (getZone ());
' w& O7 F$ ~+ M/ k. |( H) z. h8 r3 D/ m' N5 [: \3 v
try {! q0 b. r& t9 t
modelActions.createActionTo$message; k' m+ Y9 f) J$ F# Z4 Z0 \) r
(heat, new Selector (heat.getClass (), "stepRule", false));) {# M2 d$ o& w/ d" H9 i/ ]
} catch (Exception e) {& s. f; f1 w/ E' x# v5 H
System.err.println ("Exception stepRule: " + e.getMessage ());: z/ }! Q6 }- f8 _* n
}; P. T3 z: p) u- I* [
% |" `2 T. \8 g" u5 | w. n; A
try {
2 y T5 ^ q F9 B0 |+ k Heatbug proto = (Heatbug) heatbugList.get (0);. D% d) @0 H: Q/ u1 t/ S5 k
Selector sel = 2 j4 l* ^; \# X v
new Selector (proto.getClass (), "heatbugStep", false);
! |3 J: w% |; H% K* e d0 l! ^ actionForEach =8 o3 m0 D- H$ ^& O& L1 O; m) W' K
modelActions.createFActionForEachHomogeneous$call5 T+ b0 T9 p% G* y5 q: m
(heatbugList,
3 V+ I/ T2 M9 D. D new FCallImpl (this, proto, sel,
. I% g! \9 n/ H2 A2 `3 L new FArgumentsImpl (this, sel)));
8 j1 n- I0 G T4 k/ B+ |& B* c- i7 \* b } catch (Exception e) {
" d; V/ K1 U' g/ {! \6 m e.printStackTrace (System.err);
6 |+ I* ?# R+ @& { A# o5 o }9 [9 X+ |) z# B0 {, M/ e
) G1 j. V& l9 U: [* q; x2 a syncUpdateOrder ();
5 [& ?: }' e Q
. V5 [1 ~& K5 [- J try {
1 W! l+ \4 p* G- p9 u- y$ `$ @. ] modelActions.createActionTo$message
" v3 B8 X" ?5 x (heat, new Selector (heat.getClass (), "updateLattice", false));
" T! w- |0 K* v- I& a } catch (Exception e) {
- O# P* u5 p6 T" p) E% s System.err.println("Exception updateLattice: " + e.getMessage ());
) Z3 V* i) o7 J2 q% h" l1 i }$ h& ]9 ]. \5 Y7 |
" X! \% i0 }. v
// Then we create a schedule that executes the
" J4 w/ h% o- X8 Q! D // modelActions. modelActions is an ActionGroup, by itself it( f$ ]6 f7 Q$ e& q/ ?" k' U
// has no notion of time. In order to have it executed in2 w& o& u- t/ K& m* K
// time, we create a Schedule that says to use the
0 m2 I: y) }% m // modelActions ActionGroup at particular times. This5 T( [0 u$ }6 p9 I q
// schedule has a repeat interval of 1, it will loop every+ A4 M8 z5 z W& z, L/ ?
// time step. The action is executed at time 0 relative to
+ U& [; j% F9 N // the beginning of the loop.
& i$ C* T3 h B8 ?8 u( }8 E% p: s8 Z+ q4 A8 O* W( P
// This is a simple schedule, with only one action that is
5 S6 H" [9 H* ? v$ r: \" d // just repeated every time. See jmousetrap for more
* n! s* `7 i9 U" @6 u- | // complicated schedules.6 I/ R" h" q3 I$ \
2 a! L& E0 h# s# _: E5 m5 I0 d R
modelSchedule = new ScheduleImpl (getZone (), 1);& Y! P3 b/ |9 E Y
modelSchedule.at$createAction (0, modelActions);: w. o2 `- | i: b
" ~) g7 |2 S b2 B7 q% g return this;
' W7 K. l( f" V+ V: _0 N6 ]3 S } |