HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:& H, n" e d7 E( |2 q) Y( {
4 o( \8 G7 z8 i3 ~$ Z
public Object buildActions () {# ^: M5 n7 R0 g
super.buildActions();
6 `- e" V1 j' ^1 @ / z5 C) w4 a# P
// Create the list of simulation actions. We put these in: s/ r9 b2 N+ g* t( h
// an action group, because we want these actions to be: ]! b& J8 o7 R% y7 x
// executed in a specific order, but these steps should/ W$ s: z3 F C6 }7 E: z$ e+ q+ d- ~
// take no (simulated) time. The M(foo) means "The message
+ b% E$ k0 T D // called <foo>". You can send a message To a particular
& ? [9 Z7 L2 ^+ H7 I% l6 j/ E7 d# _ // object, or ForEach object in a collection.
3 o+ L M2 q0 t1 @
% O; ~' G# {2 z. T" a3 Z // Note we update the heatspace in two phases: first run
3 A3 p o2 k( ^+ n // diffusion, then run "updateWorld" to actually enact the
, l( ~4 g) O* j& l6 c // changes the heatbugs have made. The ordering here is
3 I2 j5 @; l+ e8 | // significant!
5 S7 }2 {! b8 \6 {$ g8 m/ i/ ~* x 3 x& m0 Z6 M) V' b- u
// Note also, that with the additional
" [ X. L" T/ J1 n // `randomizeHeatbugUpdateOrder' Boolean flag we can! N G9 n0 ]5 z9 @$ {* h/ Z2 m1 w
// randomize the order in which the bugs actually run
# Z) i5 b& W8 ] // their step rule. This has the effect of removing any
; F$ O# Q) ?4 z& p7 q1 l // systematic bias in the iteration throught the heatbug7 s) W# E7 U# a5 V: r( f8 V% M0 y5 J
// list from timestep to timestep
- u1 I, a8 @% G6 _
, i' C8 X. T# l& s% x // By default, all `createActionForEach' modelActions have1 O; r9 A. @5 _0 W r- o
// a default order of `Sequential', which means that the
9 v* ~4 X8 L! O g0 F // order of iteration through the `heatbugList' will be
0 c9 R7 i0 ~+ B3 g // identical (assuming the list order is not changed& X9 W! C9 P5 U- z
// indirectly by some other process).' w4 _2 f5 F% x# f
3 R# u+ H& }! r9 j, q) r
modelActions = new ActionGroupImpl (getZone ());
1 ~7 j. ~$ C7 M/ o$ U8 I. d
+ i: ^$ h1 [; Z9 Q: n4 F8 ? try {$ ~- w& G3 @9 Y7 N4 _6 T
modelActions.createActionTo$message
4 a$ }! c3 ?* s* o (heat, new Selector (heat.getClass (), "stepRule", false));
7 ?( {8 Y% ?# I4 I" R( A* Q& K* @ } catch (Exception e) {
# Y0 F3 S' N$ I: C( \% A' V System.err.println ("Exception stepRule: " + e.getMessage ());
8 T. X# ?4 }1 f( V; H7 Z }
. L o$ M( n7 d
9 L' @2 O5 {0 U try {- }' S. _# f" u0 x# ?5 k( d# V, ^
Heatbug proto = (Heatbug) heatbugList.get (0);
6 E1 d2 k7 Z6 B' A$ |2 w Selector sel = 4 s/ f: y0 I0 T5 }/ p% a
new Selector (proto.getClass (), "heatbugStep", false);- [5 n* _/ N, P8 b' t
actionForEach =
/ Y0 t8 N4 o: N$ a& m% h modelActions.createFActionForEachHomogeneous$call
4 x# ?, f7 r4 q6 y" u/ p: Q (heatbugList,
7 |1 o; p& ]1 j* L C new FCallImpl (this, proto, sel,
" j+ ]0 }. Q9 y9 C: t# b new FArgumentsImpl (this, sel)));
. E O1 e8 P) i! m( I4 Z5 ^9 @# ? } catch (Exception e) {
+ z t9 S, z, L8 m% C e.printStackTrace (System.err);( B2 i" ~8 s2 X
}
6 X2 x8 |, U7 a/ G+ H% T
) K* P! f2 j5 k$ `; G7 C6 R) _ syncUpdateOrder ();
; ^+ X, j ]6 t8 n$ k+ n9 r& ?; P! g$ G; L" y- u% e
try {; L( e: A/ B# J
modelActions.createActionTo$message
% A8 o8 j) r. m9 z (heat, new Selector (heat.getClass (), "updateLattice", false));( c5 A9 u/ ]( X* a2 o
} catch (Exception e) {3 B! _1 [, ]6 e/ J
System.err.println("Exception updateLattice: " + e.getMessage ());1 o3 A' H. E8 g
}' g4 L- B6 k% ?# Q8 f4 W6 K
5 ?/ W7 N) @2 l% M
// Then we create a schedule that executes the
) I3 P4 A2 \# j3 W // modelActions. modelActions is an ActionGroup, by itself it
7 c3 ^/ n( U! \) j0 E- V // has no notion of time. In order to have it executed in
1 W7 _% y" Z# G3 a/ t3 M* c+ Y2 E // time, we create a Schedule that says to use the
- k1 M' A8 p" o( A8 N // modelActions ActionGroup at particular times. This. c# T+ K2 N4 D2 e( D+ b) p7 L) I
// schedule has a repeat interval of 1, it will loop every
" S# ~4 Y$ W' f: d* q: c3 U! n // time step. The action is executed at time 0 relative to- E! b% R. y7 J; B) k
// the beginning of the loop.0 l( f; P' x" A
/ _5 j2 P: |0 y1 i6 q7 e' ?! P% W
// This is a simple schedule, with only one action that is
: n8 v8 S6 e' {2 O8 K9 ?2 n! z& S7 S // just repeated every time. See jmousetrap for more
% D# Q6 k3 W* w3 x" H; I // complicated schedules.+ i/ p5 z5 `4 u. x& ~. S& O1 x* o
+ f7 ^# D ^* d3 \2 F |* v' Z
modelSchedule = new ScheduleImpl (getZone (), 1);
1 E$ E1 D1 I% a) {0 P( ? modelSchedule.at$createAction (0, modelActions);
2 |* m/ ~" \( V' y: D
B" `9 d- Q7 Y' {4 O5 x1 p return this;6 `+ R' _8 r3 n7 b) b- u
} |