HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
/ m7 U: U# _# s
8 W( R9 W' p' ]0 V public Object buildActions () {5 q, x% s% o9 O
super.buildActions();! a" ~9 M1 Y; I5 J9 _4 A
0 b5 w* g8 t" z! l9 P" U$ Y+ `
// Create the list of simulation actions. We put these in
V- H" ]; h5 \4 l9 I; c // an action group, because we want these actions to be7 t& N/ [% V$ Z& [0 h- y- {
// executed in a specific order, but these steps should
+ W; d" y' H D( R // take no (simulated) time. The M(foo) means "The message
0 t+ R: D( ^+ h // called <foo>". You can send a message To a particular5 f B3 A" \ c* [& f) Y
// object, or ForEach object in a collection.
! p+ ?' ]% g8 c( b6 W
, E' t$ s- N5 G+ f, X // Note we update the heatspace in two phases: first run
5 ]# z& {* [& Y) m% G // diffusion, then run "updateWorld" to actually enact the
) p1 N# [5 E: b: }+ }/ B // changes the heatbugs have made. The ordering here is
$ `! N' h. E8 L" j, K // significant!
* t5 w! N3 f7 s* j7 A 2 l W. ?$ u- \4 p
// Note also, that with the additional
3 f9 v3 K/ a# h. g // `randomizeHeatbugUpdateOrder' Boolean flag we can- l. W" \; x, F2 |9 I4 X+ H
// randomize the order in which the bugs actually run
6 k2 M" c! O, |4 [! E // their step rule. This has the effect of removing any# u) M8 O& _: q
// systematic bias in the iteration throught the heatbug
3 o+ L7 V e3 @! Q' H, j3 s // list from timestep to timestep* ^7 X8 Z, n- l/ H
% y: @3 O7 r- ` O/ y: a9 w // By default, all `createActionForEach' modelActions have7 U% W7 ` s2 `) C& P: p" l
// a default order of `Sequential', which means that the
$ |3 \# N! i1 j9 o# o6 U/ Y // order of iteration through the `heatbugList' will be
6 f# x1 M% V' r // identical (assuming the list order is not changed/ z' f7 h% `% I5 l ]& F
// indirectly by some other process).- D3 d" s' g$ c
, r# v! Q5 Q- s) V modelActions = new ActionGroupImpl (getZone ());+ D2 C1 w4 ^* C& O1 O
5 y, J- v$ n* r try {
$ h, ~+ i6 Y2 } l& { modelActions.createActionTo$message- C* a1 @, F( Q. ~$ N* `
(heat, new Selector (heat.getClass (), "stepRule", false));6 Y1 ] f4 e. }( a3 n
} catch (Exception e) {& t A5 _) k$ R4 q, A& M
System.err.println ("Exception stepRule: " + e.getMessage ());
1 E7 h3 @) ~- k5 j( Y" Y1 }% a }
^: X$ _9 s* P( K) x
( w0 i7 c6 ^- t) @, e try {6 s/ {) B$ W a" y
Heatbug proto = (Heatbug) heatbugList.get (0);+ J3 M% L( I! N6 g
Selector sel = ( c0 o, L! D/ N5 ?3 s1 [4 j0 W+ j
new Selector (proto.getClass (), "heatbugStep", false);; ?( q( g( k: ?2 F
actionForEach =- f" t' x/ f1 n0 W5 H
modelActions.createFActionForEachHomogeneous$call
9 S& U7 i1 h, `" y$ e: O- n4 E (heatbugList,7 d" d! }7 `1 G1 n9 D9 r' C- |
new FCallImpl (this, proto, sel,$ w: r, b/ c" M& f, T6 E
new FArgumentsImpl (this, sel)));* M0 p# w: {5 U5 B1 O- s
} catch (Exception e) {
6 U5 \/ C9 {. h6 {2 f' O2 R: h e.printStackTrace (System.err);/ L W' c5 k d9 a% D: I, w
}5 M. U! L1 d7 l$ g7 k, |; k( U
$ Y, P# K, | R
syncUpdateOrder ();
% y6 @0 @ O: j& @9 g3 |7 U7 n
. Y. R& [; f3 P" d" ]) G2 i try {
O5 t: i) l' t1 O& D modelActions.createActionTo$message
+ Z8 Y" C, g; u) C: b (heat, new Selector (heat.getClass (), "updateLattice", false));. {& R$ R& R6 Q2 t
} catch (Exception e) {" ]! X/ J3 R+ D$ G. d
System.err.println("Exception updateLattice: " + e.getMessage ());$ r, a9 o) u, f) Y2 e! K" T0 t
}! C# |4 d4 Y) I! m5 ~
6 o5 h* o4 [: n F! A# \ // Then we create a schedule that executes the
: h8 I7 ?' U, n/ T3 i/ X L) X // modelActions. modelActions is an ActionGroup, by itself it U1 j3 Z5 I" \+ P- t# }: I
// has no notion of time. In order to have it executed in
. r# {9 T: c* ^ // time, we create a Schedule that says to use the
5 W9 M# F. r4 S2 _8 V2 J // modelActions ActionGroup at particular times. This/ B! m2 P& U* i- o
// schedule has a repeat interval of 1, it will loop every4 @& v9 t9 ]) i& @! O( C0 x
// time step. The action is executed at time 0 relative to
7 r6 r4 N9 E+ a, B0 N0 d // the beginning of the loop.
- e6 P& N; N! p# l0 b9 [
, ?1 x9 b# _. W9 w" s // This is a simple schedule, with only one action that is) D5 S6 z T% i. K L8 P; U3 y
// just repeated every time. See jmousetrap for more
7 _# C3 [0 ? z6 v4 F // complicated schedules.
* W! v3 ]* F0 x# @- w2 q 4 G) y7 S5 ]8 f3 b: r4 j
modelSchedule = new ScheduleImpl (getZone (), 1);
' r* f; n6 |$ u: ?( h" y9 ] modelSchedule.at$createAction (0, modelActions);0 k0 `# I- Z/ c& {6 {; G/ z. M
) @8 I) z( W7 B+ [. s, P9 o# {: Z return this;/ c$ T3 T; U; w8 Q H
} |