HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
+ O/ v2 Y9 `5 t( h* n" m7 Q
. V' {+ L5 h# z; a8 q- T public Object buildActions () {7 m4 d5 ^ a. r' z/ J" o& b. B
super.buildActions();, Q- q; g6 k; G4 j; u- H
* a8 r M. p0 o- B) H0 Y) B/ n" q
// Create the list of simulation actions. We put these in
\$ E/ y' X! i5 I& @# M6 o9 @' R& [ // an action group, because we want these actions to be
; z( L- r0 W' D+ s/ m // executed in a specific order, but these steps should
' v3 |8 z+ i. H4 D% \" A% W // take no (simulated) time. The M(foo) means "The message+ |- n% z+ H. a) s) X5 d" S$ t
// called <foo>". You can send a message To a particular
) I* h: J" q- N! h/ q // object, or ForEach object in a collection.# j1 D8 r3 H9 Q: C
) y, b* p( }) t6 k+ l% I+ d // Note we update the heatspace in two phases: first run+ E( w! V; x' P3 H W4 r' r
// diffusion, then run "updateWorld" to actually enact the1 T6 ?/ H2 K. c9 G
// changes the heatbugs have made. The ordering here is
5 {7 X) |% q( g( Q! X // significant!
5 r) h: o! a+ o* @; f, h
7 x; I5 K& S C; @( ]* P // Note also, that with the additional1 M9 |: y! F: @7 O
// `randomizeHeatbugUpdateOrder' Boolean flag we can
2 P' J' k& ^8 p' G // randomize the order in which the bugs actually run
3 M. `0 e( Q4 b // their step rule. This has the effect of removing any
1 \1 ]5 c, ~: r* ?6 y // systematic bias in the iteration throught the heatbug. a3 Y8 T/ A' y& b# M
// list from timestep to timestep6 m( J/ a$ Q7 o) ?
2 T$ z: Q" B& ~; R' h3 D5 n // By default, all `createActionForEach' modelActions have# Y2 ~# f# H7 n/ o; E
// a default order of `Sequential', which means that the' s' i& a; C) a2 u; q9 Z) z
// order of iteration through the `heatbugList' will be
/ ]/ E# k* H* h0 N // identical (assuming the list order is not changed
u) ^$ S8 S2 `& y7 [8 z // indirectly by some other process).7 c$ J/ g- M1 k5 y3 P' l
5 r& X z* [9 ~+ \2 v4 n8 w
modelActions = new ActionGroupImpl (getZone ());
: X8 R$ f* E) F4 \* E e5 Y) o7 y* x* N; A4 r1 c% _! p2 v2 H, `
try {
; T& C0 V1 B. P% _0 h7 X# p modelActions.createActionTo$message
/ }! L! X5 u+ @ l# {: k (heat, new Selector (heat.getClass (), "stepRule", false));, ?7 f1 S- a* p9 ~# z, o8 [; n# R; V0 L
} catch (Exception e) {9 `# B* y+ k h. Q% V, W# W1 ~2 \! G
System.err.println ("Exception stepRule: " + e.getMessage ());
2 V, I" B* \3 d) y }
" [) q/ ]) y3 G F
- V5 n2 y2 S1 @& S1 f* f try {
7 @1 [7 T! b9 O5 w5 Y Heatbug proto = (Heatbug) heatbugList.get (0);
/ \4 U; j+ V( ^3 { X& @6 @ Selector sel = 6 g0 X7 L. ~% e# h& M: D
new Selector (proto.getClass (), "heatbugStep", false);
( |/ i+ b) v y# T( ^. m! R actionForEach =& x' d& ] m- W: h' t# m! r _
modelActions.createFActionForEachHomogeneous$call
- |' i3 N: C6 m4 \3 } (heatbugList,! x) G9 m( Z1 U3 |. X* a L8 b
new FCallImpl (this, proto, sel,9 ~6 @, }! d6 u% j% L: c7 } Y
new FArgumentsImpl (this, sel)));
4 N7 G# X3 W5 N1 o$ A( H; j } catch (Exception e) {. w; k i L0 I4 j: B- q
e.printStackTrace (System.err);
3 _. J* {! @, Z1 n4 |. h' y }6 X! W! h0 I" ]! G9 \
9 D2 J7 k5 f8 g @( o
syncUpdateOrder ();
! X: F( e, k4 B& I* r, `
e- _# Y, v9 q* K7 K try {; X) a; h f4 V! N
modelActions.createActionTo$message 0 U8 [, W& k! W( r: p5 ?
(heat, new Selector (heat.getClass (), "updateLattice", false));6 i' h- D, ?" U4 ~+ C1 f, c
} catch (Exception e) {; t8 N0 Y' [. r1 C
System.err.println("Exception updateLattice: " + e.getMessage ());8 x ^2 f$ y- n
}
* V& C- h( ~' @ 6 Z* f+ L/ o8 U" ~, C3 n
// Then we create a schedule that executes the
8 S7 b |6 g% k0 A+ i$ k // modelActions. modelActions is an ActionGroup, by itself it
! m' K' x' x, ]; B# Q& M // has no notion of time. In order to have it executed in) A( V+ j( d0 m2 z: u( ~4 e
// time, we create a Schedule that says to use the) ?. q, p* ~# U4 G
// modelActions ActionGroup at particular times. This
0 X0 t: y2 c# s& U- q1 C" I // schedule has a repeat interval of 1, it will loop every
$ R& |2 h/ D0 F5 `. o/ b // time step. The action is executed at time 0 relative to. d; [" H( `& r1 J0 G, z
// the beginning of the loop.
& h" p% i8 v) \; h* b: h4 Q# s# ]. J- D, B
// This is a simple schedule, with only one action that is8 I. }3 R! c0 w
// just repeated every time. See jmousetrap for more
( d9 d+ {; z: b' Y" U1 s1 y // complicated schedules.
$ O: M1 e, R9 ?6 x
! K* P; ], z( M) w modelSchedule = new ScheduleImpl (getZone (), 1);5 P3 e, ?, b4 f+ J# L5 z
modelSchedule.at$createAction (0, modelActions);
' |& P a; T% W5 L7 w$ g, ~9 ~9 t
( z+ d* o% H: m' ^8 S. y) d return this;
2 }) e+ X7 j, V% x% @. N) Q% { } |