HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:2 b4 g+ d/ r* G/ ]. o: j$ A- _7 N* ~" r
6 E: n6 m; @" c* ? public Object buildActions () {& x. G+ v- _8 I+ q. J& p. t
super.buildActions();
" V' w! Z1 b. h- R' c L
. }& L# I% d; ^( _. c x$ L% z // Create the list of simulation actions. We put these in
( C4 n& v8 r8 a8 c3 Z // an action group, because we want these actions to be4 W: ~ N; v% }: G2 g
// executed in a specific order, but these steps should! n/ m2 }* q. O$ _
// take no (simulated) time. The M(foo) means "The message& N% x/ q4 c% T9 G. g) {8 h/ [3 ~" g
// called <foo>". You can send a message To a particular
) _% D9 c8 C( i# ]/ U8 @5 [) e // object, or ForEach object in a collection.
# B$ J9 E" [! g & }( Z* }- q$ n& d' J! v& T4 o
// Note we update the heatspace in two phases: first run
4 `) Z# v' d+ s4 T1 c // diffusion, then run "updateWorld" to actually enact the# V1 N9 Y8 ?% h1 \( _4 N; i
// changes the heatbugs have made. The ordering here is
, e& S- T! \& M& ]9 m# | // significant!6 _: z2 `. s: M* G( @6 Q
9 g3 {; n9 s& b! S- i& F
// Note also, that with the additional0 l1 F1 @0 w+ ^/ |# z$ e
// `randomizeHeatbugUpdateOrder' Boolean flag we can
( E3 D) u& t8 v! P! J, @4 l: Q // randomize the order in which the bugs actually run
0 `; [" n2 x: a( w // their step rule. This has the effect of removing any' P$ b' q. e0 k1 c
// systematic bias in the iteration throught the heatbug
. a( H/ i: L! j2 T // list from timestep to timestep
" C, z. \4 d' r: i4 A + s4 Y% k/ `7 V! C
// By default, all `createActionForEach' modelActions have6 x+ _6 _1 Z8 z
// a default order of `Sequential', which means that the7 J" S1 N+ X/ g) I* f0 X
// order of iteration through the `heatbugList' will be$ O0 F& H. Z& N- L. a
// identical (assuming the list order is not changed
8 {9 s9 P8 j1 \8 C // indirectly by some other process).
" @7 [6 M# b4 y" i. E
9 [+ W: y- S" u& G modelActions = new ActionGroupImpl (getZone ());5 Y: }" V$ p! M/ |
1 u4 s7 m2 d g; Y/ l: u3 ?( y9 D
try {
0 a2 {7 \* l) L modelActions.createActionTo$message
$ _: Q- o% T J- Q/ B' d; T (heat, new Selector (heat.getClass (), "stepRule", false));2 R- A5 k/ r2 G* \' w
} catch (Exception e) {
: O# U5 _8 ?; e2 x: _" n: _9 ? System.err.println ("Exception stepRule: " + e.getMessage ());
, _9 B, C0 }8 X) X2 b }# s, ~' c1 q7 K8 u3 d
8 K' T& E* f- f1 ^' _% j, ^ try {) \, k( _! J; x; W, P0 H
Heatbug proto = (Heatbug) heatbugList.get (0);
0 f, S( P' f. h: n Selector sel =
4 C7 r8 P/ Y4 M2 @0 e! g) L new Selector (proto.getClass (), "heatbugStep", false);$ x) V; Q3 y9 _5 W( {4 v
actionForEach =/ h$ ]% Q) d+ Y
modelActions.createFActionForEachHomogeneous$call
4 A6 G" @& C- }0 ^+ W- L& Z6 ` (heatbugList,& |- W" b+ S3 j! r
new FCallImpl (this, proto, sel,
* x8 W, ^5 T; D( C$ s( M6 y& w5 K new FArgumentsImpl (this, sel)));' r4 b1 R4 C" O9 h. Y
} catch (Exception e) {
P& @; O' Z- R! N" k e.printStackTrace (System.err);
; V4 f% H1 B4 f3 Q& V' H9 `- z ^ }
' F2 X. Q, R1 @* P) X. ~5 B
" B. g% g5 [! X syncUpdateOrder ();, C# @0 r( v; R) J7 D) d( m
/ ^0 s0 [% j$ J
try {
' R5 S/ A; E; X+ U8 B3 t modelActions.createActionTo$message 4 X( E$ z0 S. x) H' `6 v+ P
(heat, new Selector (heat.getClass (), "updateLattice", false));
7 C$ n% S/ y) _% a7 E6 J } catch (Exception e) {, k/ S% V m Z, z6 ]
System.err.println("Exception updateLattice: " + e.getMessage ());
7 p1 w0 `* P' `2 i) S- r. I }
* M& `& A1 }0 X6 ~* T 5 A7 H# a1 i1 C9 X+ J/ `
// Then we create a schedule that executes the
% X. Y8 y1 T* m' x5 \3 X/ _7 A // modelActions. modelActions is an ActionGroup, by itself it' N0 w5 P1 X9 I& \! y
// has no notion of time. In order to have it executed in& \$ X$ C- E9 Q, {
// time, we create a Schedule that says to use the1 T/ \5 c/ y( N
// modelActions ActionGroup at particular times. This
0 S# x' n" K; `8 O3 R6 N9 ?. n // schedule has a repeat interval of 1, it will loop every& W% t& [* b2 Z# Q, _$ u
// time step. The action is executed at time 0 relative to
8 ]6 u! X0 r. W* B# H // the beginning of the loop.
6 Z9 q- v2 r, d& X2 `1 |- D
# E m# {) a A* G3 T // This is a simple schedule, with only one action that is
: B! h: H. Y- K4 D // just repeated every time. See jmousetrap for more
8 K+ R& g- G" u // complicated schedules.$ [/ c: q1 M5 K7 k5 x( o+ S
( Q1 l$ ^# G' c* K
modelSchedule = new ScheduleImpl (getZone (), 1);
7 _; {7 x+ R! o+ j. G1 r7 E modelSchedule.at$createAction (0, modelActions);
. @$ `, k l' N2 o8 T
1 y4 a5 \1 K9 n return this;# i; C& Z9 H2 L) ?, d/ W. T
} |