HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
) ~9 c3 t/ {* b- _% ^; B# c) S# {+ Y- z# L- k% [
public Object buildActions () {
9 G( X7 ?3 `, d super.buildActions();: P0 R( l3 Y: J
[0 |' g9 U- P ?
// Create the list of simulation actions. We put these in; R4 n9 i: W0 [+ q& u u
// an action group, because we want these actions to be
- ]2 ~4 S# ~$ a1 Z/ z- c+ O // executed in a specific order, but these steps should
+ Y6 D5 ]- v, H, y* V* v // take no (simulated) time. The M(foo) means "The message
% O# J9 B p% p // called <foo>". You can send a message To a particular
# ^& v* t) L$ V d // object, or ForEach object in a collection.3 ?8 S; |; p7 f3 r! k! y0 j
, d4 s2 u0 g' K6 w3 x // Note we update the heatspace in two phases: first run
3 ^2 D0 |* c2 r // diffusion, then run "updateWorld" to actually enact the
S/ o% p/ Q- J7 O5 @5 ^# k, g // changes the heatbugs have made. The ordering here is- t. Y) r& M) Q1 F
// significant!$ g1 Q3 t! g( t& @4 C) e/ [
* A w7 i6 o$ S- j // Note also, that with the additional
7 H% V5 G/ |% N6 p6 z // `randomizeHeatbugUpdateOrder' Boolean flag we can
8 f: _' G4 @7 |, U4 _7 d+ S/ ?% z // randomize the order in which the bugs actually run6 t- ]5 w9 Z( _ \0 W
// their step rule. This has the effect of removing any
, k# h+ _1 m9 c5 {- z // systematic bias in the iteration throught the heatbug
- u7 m" Y2 v/ B, u/ z! t // list from timestep to timestep+ C# t; o* J' I } e" y
8 ^& f1 i: l! C // By default, all `createActionForEach' modelActions have
* T& r- `+ W! \ ^ // a default order of `Sequential', which means that the
0 m& w1 r! \0 n! Q5 f7 a // order of iteration through the `heatbugList' will be) y/ G$ ~, i- W* X/ v0 G X
// identical (assuming the list order is not changed& Z6 G+ I w$ e+ T
// indirectly by some other process).7 g0 Q, {3 v" s2 G& B( T% L3 G
& _6 b) Q1 _2 c A, e2 ` V' d
modelActions = new ActionGroupImpl (getZone ());% j3 b# ^* r w* ^. x. W: I+ G1 o) B
3 g$ ~! ^! `/ ?4 D try {
6 h' H6 _( q U4 M2 v% P modelActions.createActionTo$message
) d/ }% ^' L/ I$ b& C4 v (heat, new Selector (heat.getClass (), "stepRule", false));' Q; @% s3 O" L+ Z2 [* y
} catch (Exception e) {
- q0 }, w# T( A$ k System.err.println ("Exception stepRule: " + e.getMessage ());
# V- X% R$ r( E( Z( d }
# P" ~8 z, V/ _" j5 t1 X# F8 q0 V& y4 [7 e Y% B' e4 a
try {' c1 b1 y g/ `
Heatbug proto = (Heatbug) heatbugList.get (0);
! m: v3 c0 J( E+ K* J k/ g( h Selector sel = ( h/ Y) S, y& t$ ]% y
new Selector (proto.getClass (), "heatbugStep", false);
9 |2 @. v' A# c5 d& ?& I actionForEach =
; b8 A# j) a* L4 X% C2 D modelActions.createFActionForEachHomogeneous$call
4 e; m- @9 w2 h4 J/ y/ p; b1 q/ o (heatbugList,
( R! ]& ]& T( e2 `, |' l1 Q' C new FCallImpl (this, proto, sel,5 C1 v: f; N4 u
new FArgumentsImpl (this, sel)));
9 M4 y/ v+ S* U9 N7 s } catch (Exception e) {
M& q$ v5 S& F$ B e.printStackTrace (System.err);, t; m* \. r- X& V- k8 s" h7 W
}$ z9 K3 v& ], N* u
3 V }* ]( F+ R syncUpdateOrder ();
1 n F3 h' |" w: [+ `8 O
, {5 E- t: g! e$ k" y3 o; w* j try {/ ~7 n8 U. D: G% e& ~3 b4 r
modelActions.createActionTo$message 0 r& O7 f g* G$ b* q$ r
(heat, new Selector (heat.getClass (), "updateLattice", false));# |8 `; z% }% G K0 R
} catch (Exception e) {
3 L2 `0 r. Q) J System.err.println("Exception updateLattice: " + e.getMessage ());
' F+ x8 M! c! P }% v3 G6 G: |6 g* H1 I' \
; y8 I% u, L8 Z8 s // Then we create a schedule that executes the
3 `9 P& `$ l/ t6 N4 t4 C. t // modelActions. modelActions is an ActionGroup, by itself it
* N( X1 k) u* v& C // has no notion of time. In order to have it executed in$ J( t1 @: X4 F3 o$ G
// time, we create a Schedule that says to use the7 o) [! k0 U3 z1 j# F6 T
// modelActions ActionGroup at particular times. This
1 g1 Z& V2 l% ^0 v+ ?6 _ // schedule has a repeat interval of 1, it will loop every
7 `4 z6 W4 f; U // time step. The action is executed at time 0 relative to/ ^2 i; Q3 G: C9 ~+ I M) a
// the beginning of the loop.
7 `+ ]2 N/ W: [( J/ K _ x$ V& }
$ }$ O. s5 D5 U* i0 |0 \ // This is a simple schedule, with only one action that is
# P3 ?5 N; s( T- R$ G, |2 J% G // just repeated every time. See jmousetrap for more+ w- h8 V4 n: a7 B- `
// complicated schedules.0 t6 G6 j0 R7 n
2 S' X4 S0 X- V) [1 J modelSchedule = new ScheduleImpl (getZone (), 1);
# A7 C6 ]" ^' A modelSchedule.at$createAction (0, modelActions);
% @3 j) J2 ^! A, z% l5 N
; n! N8 y8 S: x0 ~, B( X return this;$ E' v% O4 e- d$ x8 `7 g5 Y
} |