HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
y) ^- c+ A3 @$ B" d. e6 }1 b A* a0 l0 [; i7 z
public Object buildActions () {
/ W6 o6 L3 N" r super.buildActions();
$ q! L" \3 {1 }! o1 G' O
! h3 g9 v% I# ~0 j6 i3 q5 ~ X // Create the list of simulation actions. We put these in
% w9 v6 S: e. H/ x! h // an action group, because we want these actions to be
+ l; P) T9 ]) C // executed in a specific order, but these steps should
( C9 w d+ B. u! I3 M d) ^9 c // take no (simulated) time. The M(foo) means "The message& b/ c! R2 E9 W/ N, `
// called <foo>". You can send a message To a particular
+ g4 j; w2 {+ T // object, or ForEach object in a collection.
$ u7 W( B$ c5 T% W / r5 s5 i+ i [" S8 k1 I
// Note we update the heatspace in two phases: first run1 }9 T7 _, l4 f8 }
// diffusion, then run "updateWorld" to actually enact the
# K* ~' v& E! V9 i% L% |# B, E // changes the heatbugs have made. The ordering here is
- G) N9 Q% l& `% I // significant!2 W% j* I' I. l& f# h; N# N
1 R, ~& o- E7 c, L // Note also, that with the additional
5 \7 }+ N4 Y W3 D8 c // `randomizeHeatbugUpdateOrder' Boolean flag we can
9 G! ?9 v7 t: e8 t5 }$ o' U6 @ // randomize the order in which the bugs actually run
7 n& ~, {% X; _3 R' d- @0 o // their step rule. This has the effect of removing any- v8 y7 s5 |/ ?* t( F4 O, T% V
// systematic bias in the iteration throught the heatbug+ U) ~/ X4 r2 I0 _ o
// list from timestep to timestep& N- b; M: n8 x# ~, t& E
' G, r( N+ p8 a, J- ~1 p
// By default, all `createActionForEach' modelActions have
7 ^5 a9 x' [8 h H" Y9 l // a default order of `Sequential', which means that the
" q* L, _% J* _9 ]* Q // order of iteration through the `heatbugList' will be
9 Q6 }/ T. Q# w6 f // identical (assuming the list order is not changed
' Q( G6 {, E$ E$ M4 i // indirectly by some other process).
) X$ h- k. R' x2 o3 N % @" H( A2 s: r
modelActions = new ActionGroupImpl (getZone ());7 G+ L8 [5 J3 `: A
& N( ^6 t4 U( T6 P try {
6 [$ b) o& ^/ v modelActions.createActionTo$message
! z6 ^8 F& u0 W0 x7 L4 J, y3 J1 v (heat, new Selector (heat.getClass (), "stepRule", false));
, Z2 a; \7 F' [: N$ b } catch (Exception e) {' b# d7 f- l! Q }8 [4 I# ]
System.err.println ("Exception stepRule: " + e.getMessage ());
) v4 S: G- G( ?: ^ }" a& q; V' M& F5 B. e
4 n. A( j- H5 D9 t7 f9 i5 L$ n) t try {/ |: b; p/ p8 O- X
Heatbug proto = (Heatbug) heatbugList.get (0);+ ~) G3 W: T7 h* {) t
Selector sel =
$ H3 D9 }- b8 v, O9 z/ M f+ m new Selector (proto.getClass (), "heatbugStep", false);
: f7 `2 e% Q9 n0 l/ f actionForEach =- g. f ^. ?6 l4 U5 m1 V; @
modelActions.createFActionForEachHomogeneous$call
7 G0 R; s: X* f' x) D% [6 ]& J5 | (heatbugList,
1 q5 m3 t% Q! F4 T# G0 S new FCallImpl (this, proto, sel,
: U0 T' }& M# T- y7 s new FArgumentsImpl (this, sel)));
- a, S6 S; d- Y0 C) q' g f0 b$ ^! T8 y+ f } catch (Exception e) {
" {9 F O& w3 d7 `0 [ e.printStackTrace (System.err);
- u: l! i* o- C) |4 a2 B4 Y }4 W7 h% t1 V; [6 |3 ^! Q1 K: h' {
* d1 W1 C: t. i
syncUpdateOrder ();
3 A) M. G9 v8 T1 j; c4 Z
- \( Q/ F1 p* }+ J' e! c try {
8 e! l* F1 M8 w* R; A modelActions.createActionTo$message 8 {6 F* N! A5 N& q* \
(heat, new Selector (heat.getClass (), "updateLattice", false));* j# ^- q6 ?6 a% r/ f
} catch (Exception e) {9 H4 X& f; S2 S; j8 |
System.err.println("Exception updateLattice: " + e.getMessage ());
. B% a k6 y3 L$ X L1 t9 r }
- a t- Z$ W1 M
9 k# D. R5 J y/ [. }1 P, a1 D( ~ // Then we create a schedule that executes the) B( P5 l K3 s9 ~9 q0 K
// modelActions. modelActions is an ActionGroup, by itself it8 U* _+ g" Y" W" h; D2 J( Q: W
// has no notion of time. In order to have it executed in
3 b0 h) f0 M2 q& t) c. E0 z // time, we create a Schedule that says to use the* v# f) w& I% E# W4 I
// modelActions ActionGroup at particular times. This
* ~7 b& L* Z7 I0 ?3 p( U // schedule has a repeat interval of 1, it will loop every
/ n5 D6 T* m* U; J/ r // time step. The action is executed at time 0 relative to/ G1 z. o* g7 S
// the beginning of the loop.: _- C0 ]5 A$ M+ l5 y! y9 d
4 }" c7 C1 m0 ^: W2 I9 g // This is a simple schedule, with only one action that is
4 g, W* \% P2 Z, H6 O; p/ I8 p // just repeated every time. See jmousetrap for more" e$ Z' n- q8 n5 s g/ E4 I
// complicated schedules./ P; X G$ \* m0 c9 O: ?# [. M* S5 }
* A2 {/ c+ p6 J2 p* U3 h; e
modelSchedule = new ScheduleImpl (getZone (), 1);6 H( x% K+ U$ @) s% m
modelSchedule.at$createAction (0, modelActions);
0 R/ O$ T6 ^1 E0 B9 M3 N6 ~
) s% }. A# v1 ]3 c5 k; o) Y/ t return this;0 ?6 H; r3 r. ~3 k
} |