HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
+ X6 l0 U' `/ G6 g* d3 J3 y* d3 \+ ]& S5 L8 O
public Object buildActions () {& M* f1 Q n9 Q, ^+ B
super.buildActions();5 ?# o/ S% k- L4 ^. M- x
* I) R1 V: U6 I: K2 `$ w# e // Create the list of simulation actions. We put these in
. f- L% s* B5 L% @/ K; y" Y // an action group, because we want these actions to be
& b& C9 }- T7 t7 y- ~0 z: b/ X% B // executed in a specific order, but these steps should6 |, Y& C/ d9 |3 k
// take no (simulated) time. The M(foo) means "The message
, @/ Z4 x8 T Z5 x# l1 L // called <foo>". You can send a message To a particular- x$ |5 k; ?3 \- m( V! B2 Q* S
// object, or ForEach object in a collection.
i. h+ m) H+ @8 V+ e6 k * h9 b. R5 J/ Q+ n. {' @
// Note we update the heatspace in two phases: first run9 g7 g% {' s, ]7 ~$ a+ N2 W
// diffusion, then run "updateWorld" to actually enact the8 _! V9 N% N8 k i7 \! E
// changes the heatbugs have made. The ordering here is7 {1 V. K9 i7 z4 H' k0 Z
// significant!
/ r3 n- K" s% i, R j/ ~5 B9 ?4 y0 g% W) R1 D
// Note also, that with the additional/ u; X# ?! T0 Y2 R4 |
// `randomizeHeatbugUpdateOrder' Boolean flag we can
+ T1 N+ H' b' g // randomize the order in which the bugs actually run' \5 B* n) y8 q* i
// their step rule. This has the effect of removing any
- l3 ^- w" R0 E5 k# D: O // systematic bias in the iteration throught the heatbug# Y, X, Y2 L8 | E0 k
// list from timestep to timestep( L+ r/ k" q( [2 I1 H: ?
9 F' G4 S) z. z
// By default, all `createActionForEach' modelActions have
; J# z# ~2 p/ X! s // a default order of `Sequential', which means that the
+ x& K: k/ e& V2 X0 C // order of iteration through the `heatbugList' will be
4 C; Q1 H8 W0 G% |3 a/ v // identical (assuming the list order is not changed
: U# Q+ [( s! J3 C6 K. @ // indirectly by some other process).
& W- p- }/ ^1 M0 l % h( h; a7 n. `
modelActions = new ActionGroupImpl (getZone ());; z( ^% z! k2 N" _+ h
5 e ]$ z: Y; L
try {7 O$ u B2 J2 i
modelActions.createActionTo$message6 R4 w# p! t. k# T
(heat, new Selector (heat.getClass (), "stepRule", false));" D O$ |% w$ t$ ^
} catch (Exception e) {
3 c' e) q, T; C7 M System.err.println ("Exception stepRule: " + e.getMessage ());1 j, C# e0 ^" n
}
3 X, ?! ?- w& [ D. z+ B7 n1 X
, t; Y# V# f2 D6 @ try {
" ?6 z- l7 P5 W/ R0 L Heatbug proto = (Heatbug) heatbugList.get (0);
9 ~: U# z! }/ ^, _ Selector sel =
0 F9 l; B5 o! u) [/ N new Selector (proto.getClass (), "heatbugStep", false);
) t* d# ~* I% k+ `) z5 h7 V actionForEach =
" v* q! d$ _! x2 | modelActions.createFActionForEachHomogeneous$call4 ~4 U. e: R& a6 a8 k) P
(heatbugList,7 P% T9 t( }, R4 _' k
new FCallImpl (this, proto, sel,
. R$ E# `8 G4 W# l# t) i5 v: v new FArgumentsImpl (this, sel)));
$ d3 L& n4 i. Y% C } catch (Exception e) {
: ^7 p. q0 \* ?! D1 _ e.printStackTrace (System.err);
) F ]9 U1 m; G2 ]& ?2 X( i }! f8 d4 m r5 n5 p, A0 ]( [% o
: E4 ^1 H/ e) z( C
syncUpdateOrder ();
1 k; X, t3 W; S4 ]9 k1 \4 x' p' p% M
try {
& n% I( ]) ~ V modelActions.createActionTo$message
) f, H4 O8 i, |# G (heat, new Selector (heat.getClass (), "updateLattice", false));. H1 W# k5 w. f9 `! V
} catch (Exception e) {
: X* K. Y A& L0 W5 ]; w System.err.println("Exception updateLattice: " + e.getMessage ());5 s5 Y8 g$ A# Y' `1 m
}2 V9 B! F, _0 V# B: e$ N- {/ f
. b8 G4 G- D/ Q* X
// Then we create a schedule that executes the9 ?& N L3 A7 M. u; | g6 z
// modelActions. modelActions is an ActionGroup, by itself it- Z! N. Z% |* [- U! F" f" I5 ]6 ~
// has no notion of time. In order to have it executed in
7 k% }/ z9 C2 \ r, j // time, we create a Schedule that says to use the
K2 l+ X m. D1 R# y; p // modelActions ActionGroup at particular times. This+ i/ ]. e1 O# Q
// schedule has a repeat interval of 1, it will loop every
: L# F$ x3 [& E- A) Y // time step. The action is executed at time 0 relative to
* s8 ^( a. C1 n) l: T* w# K // the beginning of the loop.
& P% ?$ v2 X1 z* A) v% u/ a; q7 s4 J
// This is a simple schedule, with only one action that is
; q+ O' F7 v0 R5 u2 u& k0 C7 u // just repeated every time. See jmousetrap for more* E0 K1 X' C D& w8 _
// complicated schedules., x1 M- @7 _5 `) M- G0 @6 W r
: W$ S9 D7 i3 }/ f/ Q3 r
modelSchedule = new ScheduleImpl (getZone (), 1);
/ A) x, e8 T% Y& _( `2 k& y) R$ H( Z modelSchedule.at$createAction (0, modelActions);9 h5 @8 H/ a1 @% j, ^
. M) v! \: U- E$ d$ P/ C
return this;& F: G, C; E' s, b& n1 g& s4 k
} |