HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:/ h8 r, O: |- T, d+ g- A9 G+ j$ K
) I) j& B+ x, C
public Object buildActions () {
$ h1 m* T* p3 k; `8 M3 S, P super.buildActions();
8 \( r( N. n: ?) @# J ; L& {! ]1 t* M& S( k3 A: Y- p
// Create the list of simulation actions. We put these in0 s9 V5 N# H: w1 R: M$ g! g( D _/ a
// an action group, because we want these actions to be0 P3 a; K! }) H( h6 y9 f5 S' }
// executed in a specific order, but these steps should% R3 k& j( O, ~) J$ c0 d9 v
// take no (simulated) time. The M(foo) means "The message
5 @( `0 M1 O# b% d8 p // called <foo>". You can send a message To a particular5 \' e0 z/ i+ ?9 I
// object, or ForEach object in a collection.
* r9 v, w, r9 S * v J: p% }/ X6 z+ I
// Note we update the heatspace in two phases: first run
+ @8 i+ ]+ S7 K- p J // diffusion, then run "updateWorld" to actually enact the
; K; [; J8 a" b1 s1 l* W // changes the heatbugs have made. The ordering here is
: e; _. r* d2 ~" R // significant!
: O" _/ G: B" A6 I9 E# L& H+ f
. Z$ e0 M, i3 N% D! ]6 A4 ^6 o6 v // Note also, that with the additional4 N- G, J. v, w; Z7 Z% `$ L* O
// `randomizeHeatbugUpdateOrder' Boolean flag we can
! a- u5 G3 T* Q1 j! O, W // randomize the order in which the bugs actually run: T6 O) \, g, X7 w2 H" u9 b0 M" W O
// their step rule. This has the effect of removing any" y* Q U( J# ?( G) |6 ~
// systematic bias in the iteration throught the heatbug
# w- K2 y: R) l$ \9 W! H% o9 i // list from timestep to timestep
$ C: c/ D5 Q. @/ A, I
* {# H3 N1 v: o( V, y4 v // By default, all `createActionForEach' modelActions have8 y% R. g: A7 O6 C
// a default order of `Sequential', which means that the
- y8 ?& v/ N/ V- h // order of iteration through the `heatbugList' will be
7 r9 J# s) \, a' F4 C // identical (assuming the list order is not changed' l$ ?2 t. p: c" K8 h0 f
// indirectly by some other process).
2 ?% @0 C/ N Z. L+ Y V% _. p& o% J: p% v- i
modelActions = new ActionGroupImpl (getZone ());4 l' x" o- O( \7 x
( g. J; O/ e7 y0 H0 {3 D try {' n2 ?% E9 ?* O$ u
modelActions.createActionTo$message. }& l, f1 E% U
(heat, new Selector (heat.getClass (), "stepRule", false));3 G) L q- f$ I
} catch (Exception e) {* Q( ~+ Q. V" e* k/ X' `6 x" Q
System.err.println ("Exception stepRule: " + e.getMessage ());
$ o4 ^ j3 `2 u }+ N1 f) c7 h8 w3 F& C+ G. j1 E2 m
8 t* r4 S/ P5 m9 y try {/ ~+ @: n. f2 E
Heatbug proto = (Heatbug) heatbugList.get (0);
/ _' B# |) K; F% T" s Selector sel =
$ i! m# s# H9 A/ m2 O new Selector (proto.getClass (), "heatbugStep", false);
: l. B- [, c' c/ T5 Z actionForEach =
3 }% {" w& }/ Q( h- x- I modelActions.createFActionForEachHomogeneous$call
8 e Q5 \( k) o( e' N+ \ (heatbugList,
" m/ G7 D, X6 H0 A+ ]6 R) \ new FCallImpl (this, proto, sel,0 t& R6 N. I9 G o% |, W) [
new FArgumentsImpl (this, sel)));9 n% Q `; t! J3 U
} catch (Exception e) {$ W( d' ~) C7 w8 B z+ y8 [9 }" L% M- d
e.printStackTrace (System.err);' q5 O: T, `8 b# V; q! v, C
}7 q7 ]% C+ n% G3 u
& |9 ]4 ] w$ h8 _0 N" o syncUpdateOrder ();7 b0 d5 |3 o/ [7 }8 R! p t
8 A2 b( K5 Q; Q Y% p6 a$ A/ I try {* w" Y$ ]# C# s
modelActions.createActionTo$message
, }7 W: Z; u6 y) D% l* Y (heat, new Selector (heat.getClass (), "updateLattice", false));, N3 e c' n6 V
} catch (Exception e) {! @/ u; e4 [$ b, v. L
System.err.println("Exception updateLattice: " + e.getMessage ());' D8 H: ]8 g' H% L* a
}
- F7 q7 p r0 X" W5 V * {" r7 e- f2 G
// Then we create a schedule that executes the% ~6 ]6 J% @ \, s
// modelActions. modelActions is an ActionGroup, by itself it: z. \ j# r& I9 N- Y
// has no notion of time. In order to have it executed in
! y& \! Y0 T' P5 p // time, we create a Schedule that says to use the
g6 X. G- \7 x% b // modelActions ActionGroup at particular times. This
- [: a1 u: i: X* A3 j$ I // schedule has a repeat interval of 1, it will loop every! H t7 L6 ^9 [/ Z4 ?; r2 p
// time step. The action is executed at time 0 relative to
5 z: a0 z# U- ^. Y" g& F6 h1 C) X // the beginning of the loop.
6 u4 D5 N$ E y
: {( {( ~& t7 f2 V+ }" k$ d3 G // This is a simple schedule, with only one action that is1 C6 Z# B+ f9 r6 x
// just repeated every time. See jmousetrap for more
0 v- F7 v- e" E0 B) h* _$ g/ A3 l& N _ // complicated schedules.
, o/ p9 ]/ L& s7 C: F2 L9 E1 v
& T9 K, i% m2 a6 f modelSchedule = new ScheduleImpl (getZone (), 1);
; ~+ Q1 E0 b; ^+ T; ` modelSchedule.at$createAction (0, modelActions);( k9 W1 j: ]" S/ o P9 q
0 Y, D U& ]8 {
return this;
& }2 C% u3 V9 D* C6 [ } |