HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
. D6 z8 L* c+ K2 e) l: X3 s+ W$ b2 M+ E9 J. J
public Object buildActions () {$ B4 p/ r# f/ i `
super.buildActions();7 S( M' A4 P- _
1 f' u) \; c; J6 D: l // Create the list of simulation actions. We put these in& s3 l+ a* O5 J3 [1 [ r% q, V6 R
// an action group, because we want these actions to be4 B+ m2 K9 C) T# R3 e! W
// executed in a specific order, but these steps should& i6 R% O8 g' F y( B% _; C& T# W( Z
// take no (simulated) time. The M(foo) means "The message# u& R6 { i1 \2 H9 B# X1 e
// called <foo>". You can send a message To a particular
' S4 m1 p- V2 S! i9 @& ~ // object, or ForEach object in a collection." L p4 T5 `. l, L& I' s
* S/ _2 r# i2 I4 Q( A0 \- t5 A
// Note we update the heatspace in two phases: first run% L# I* V+ m6 k2 T+ N+ w( E' C+ {
// diffusion, then run "updateWorld" to actually enact the
+ l+ k$ U" Y9 {0 {+ r# t" l& ^ // changes the heatbugs have made. The ordering here is
/ D6 [! j# E- ]# o // significant!
! N( H% M# F# H2 _" G( l6 v
5 l5 i+ p# O$ ]0 i' y# V // Note also, that with the additional8 U- D' k) A- ?; p( ~
// `randomizeHeatbugUpdateOrder' Boolean flag we can
) V# Y4 Q2 O; Y // randomize the order in which the bugs actually run H; v! L5 z5 D8 ]7 B' h
// their step rule. This has the effect of removing any- b* r) k& N! p5 j& C' t2 v
// systematic bias in the iteration throught the heatbug; A) f2 j9 m" m4 L8 X) n
// list from timestep to timestep3 ~# P N8 u y- e9 {) f' c
/ {6 P; c$ t+ {: G5 | // By default, all `createActionForEach' modelActions have
8 N: [9 d }& q& W: l) e // a default order of `Sequential', which means that the
- G7 M8 ~) w2 L+ m+ M // order of iteration through the `heatbugList' will be
" l$ L; O9 \3 x4 l // identical (assuming the list order is not changed" u: D6 ?9 F: N
// indirectly by some other process).
3 w1 m5 C; O4 y/ d( [1 m ! Z5 [& u% J0 Q- t
modelActions = new ActionGroupImpl (getZone ());0 }/ s2 a, ~" U& H" y: U2 h
& F3 C1 b" q9 C* ~9 p try {( F5 L. P6 I) y' l' M/ N; j( h$ E
modelActions.createActionTo$message
8 J8 _0 P+ n+ p) _9 f* S+ t" e (heat, new Selector (heat.getClass (), "stepRule", false));% m: O0 T/ c8 U6 N( l
} catch (Exception e) {- Y( y: R4 {, R. T; ^2 P
System.err.println ("Exception stepRule: " + e.getMessage ());( Q, u+ W" w; t# p" v6 P
}! I/ l# i4 @5 V. H
( ^" I: z8 A+ m' X3 Y6 c9 h+ b try {
% C' W& X2 F0 Z1 ~: |4 Z0 P Heatbug proto = (Heatbug) heatbugList.get (0);
" e0 `0 x5 Z7 O# N/ x Selector sel = ! M5 w: n, _- l1 c
new Selector (proto.getClass (), "heatbugStep", false);, z! I9 T: `# ~' m
actionForEach =
% ^4 F4 Z; P. K1 D% |' _ modelActions.createFActionForEachHomogeneous$call- ~0 L% E1 h5 I" @
(heatbugList,% Y& V; ^% K7 V* Q
new FCallImpl (this, proto, sel,' s, _/ `7 P- {
new FArgumentsImpl (this, sel)));
E& [: z8 j! [# M! X } catch (Exception e) {
+ A7 E( }0 ]4 a- q3 A# w' P! N e.printStackTrace (System.err);2 ]( g' ^- e g9 a$ C7 k. |) g
}, t, i+ b% m% y0 e
; D! e5 e( ]7 S, W: u5 D$ L! Y
syncUpdateOrder ();
. X( F/ b+ x# w2 r/ ?9 T
& c$ N" U. H' v5 H& i8 O! F' M- ]5 B try {
& \) P8 J, u9 M' ? [$ w modelActions.createActionTo$message
1 o" z. m ?9 y1 {& b+ J4 _* y (heat, new Selector (heat.getClass (), "updateLattice", false));8 k9 B& u) I$ n/ D* @
} catch (Exception e) {) O, A1 ~0 @3 @) f0 r
System.err.println("Exception updateLattice: " + e.getMessage ());) F4 d, b" T _
}$ z3 l5 T E0 f
! E9 n2 `' ^% t) [ j8 ] // Then we create a schedule that executes the4 h' M' p9 p6 I& R
// modelActions. modelActions is an ActionGroup, by itself it
5 h. m8 |$ L2 a4 A& e$ ] // has no notion of time. In order to have it executed in0 V4 z1 U* }1 o: P* ]. g
// time, we create a Schedule that says to use the4 m5 J7 k. s1 x! ~- q: v: q
// modelActions ActionGroup at particular times. This
# z! A; z, }, _ // schedule has a repeat interval of 1, it will loop every
6 P. i1 a; T c4 T" k3 t. l // time step. The action is executed at time 0 relative to
* A4 d8 m C S! o // the beginning of the loop.7 T$ h6 C/ K+ z/ ^8 _/ j/ U3 t
6 ` y3 G- J+ ~
// This is a simple schedule, with only one action that is$ W7 l5 f# \3 P( q% ?
// just repeated every time. See jmousetrap for more% o9 W1 j$ V' D8 o1 [+ Y. ^+ a
// complicated schedules. k8 d" t) S! V9 U6 Q( Z" Y4 I7 n
: p$ _" p3 n: \- [4 K
modelSchedule = new ScheduleImpl (getZone (), 1);+ K( j5 r3 y u8 _3 ?7 r
modelSchedule.at$createAction (0, modelActions);* A0 v* u: _$ L. Q5 T! i& w4 G
" k9 w6 c/ J7 i# C& Q) Q$ I/ v. A
return this;3 i- g7 H& t5 H+ D9 a
} |