HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
% @" S" H6 O9 R2 M
/ U$ |% L( w) h* L public Object buildActions () {
% v. L- s4 M. [9 e; O! L, _; z super.buildActions();
R i/ ]* F4 r
6 L" E5 n. U( J$ c6 ]( W // Create the list of simulation actions. We put these in9 h* D5 u) {! F- O& w
// an action group, because we want these actions to be5 `2 ^# Y' u. P1 ^
// executed in a specific order, but these steps should
A2 ^. E9 l8 Z! O // take no (simulated) time. The M(foo) means "The message
V1 t! @* c/ T- B& _. [ // called <foo>". You can send a message To a particular
- i0 t5 s" e; `, Q3 x& k // object, or ForEach object in a collection.
8 |9 L2 c/ W! L) x
* T/ [2 ]+ Z$ O# | // Note we update the heatspace in two phases: first run
* I* f2 O( L/ K( M4 { // diffusion, then run "updateWorld" to actually enact the
2 U: z. q: e, A H0 @ // changes the heatbugs have made. The ordering here is
; |$ @/ {4 w$ W; a" ^) ^2 D( h1 i // significant!: V0 ^3 H, u2 o7 f* u
0 Q) d: {: B/ T; L. ^4 B // Note also, that with the additional
* b7 U% D ~6 M- t9 R' J // `randomizeHeatbugUpdateOrder' Boolean flag we can
% D* o- k5 v5 R) X. H // randomize the order in which the bugs actually run# v5 A0 s1 @: @% n7 x7 Q& }
// their step rule. This has the effect of removing any1 L4 a( e# x$ e1 |/ C5 E0 [
// systematic bias in the iteration throught the heatbug( V7 d1 b* L6 U: G0 n2 t. j
// list from timestep to timestep
7 `$ c. U7 L# o9 ^+ v " D( r( k' `& |1 z% ^
// By default, all `createActionForEach' modelActions have
+ G: X+ f1 B; Y8 _- Q# \- d2 \ // a default order of `Sequential', which means that the
) ]8 w% U& V( u5 U. T // order of iteration through the `heatbugList' will be* c) k( r& {; F1 N
// identical (assuming the list order is not changed3 B$ Y& Y. Z& ?* L+ X
// indirectly by some other process).0 y' r* H. R2 ~$ Y) W6 A) ?: w3 p
: H; C$ |; k: g- L- H4 k' s modelActions = new ActionGroupImpl (getZone ());+ K/ [/ m* T5 u+ _, I1 j
5 o! _% K0 a+ u! J; ~! V
try {' {; ~9 D8 |1 z: }
modelActions.createActionTo$message
2 _6 B- y, q& y, p/ c (heat, new Selector (heat.getClass (), "stepRule", false));: q$ Q: w/ }/ S* l, y! y' U/ } j
} catch (Exception e) {! R/ `0 |- P/ B* e
System.err.println ("Exception stepRule: " + e.getMessage ());
7 O* b( V0 F. U# G5 }6 l* l }2 {! [( ?# _% E5 F0 z9 e% E1 B9 ?8 P" `
) n$ D" z8 ^5 c% ?" ^: w# \& a try {
& @- v9 f# E/ e; L s' n* M% \ Heatbug proto = (Heatbug) heatbugList.get (0);
8 }6 I; U0 ~5 _2 ` Selector sel = ) Z, I; d! K# l: t3 l" u5 G
new Selector (proto.getClass (), "heatbugStep", false);6 F3 ]: P6 p" E; }1 u1 X: B0 F0 J
actionForEach =
' k2 c0 x9 m$ e+ b modelActions.createFActionForEachHomogeneous$call
3 U- W( p1 r8 j* s( k: U (heatbugList,
: N! d) W: K8 v2 ~* |7 S new FCallImpl (this, proto, sel,4 U+ \: ]0 W7 n9 [2 R
new FArgumentsImpl (this, sel)));- H( Y+ C) W. G2 C- [0 p& b
} catch (Exception e) {9 S" _# G& V' k% C' W: ^
e.printStackTrace (System.err);, i5 i# v& K# }5 b- `' k% _8 ^
}+ r) l: Z% E2 J
( D% I+ E; V2 P" m5 d |! Y$ B
syncUpdateOrder ();! F9 {" c$ X4 k3 E2 V8 |' R
) P: k6 g; B0 s3 ], z+ V, \ try {7 D* Y% Y5 K! N# T) _6 s* C) z
modelActions.createActionTo$message
7 b- @; @$ J6 Z& z, ?0 r6 r (heat, new Selector (heat.getClass (), "updateLattice", false));; G5 R( T( a5 ~9 a' I# F; a3 U
} catch (Exception e) {& Q, w+ d7 t' Y2 d- R) k7 N0 g
System.err.println("Exception updateLattice: " + e.getMessage ());
' k6 A; @2 D$ n. b4 H X }4 C$ L5 I/ Q1 G4 c) w
# z3 i3 b' \$ H1 `- W3 l // Then we create a schedule that executes the
, b) j3 N" K/ i# }4 f, n // modelActions. modelActions is an ActionGroup, by itself it" X. ~; G, j0 o* _7 b
// has no notion of time. In order to have it executed in! \4 V+ K% p' ?2 K+ U
// time, we create a Schedule that says to use the( _. y) Q4 {6 g& d
// modelActions ActionGroup at particular times. This9 O" W$ D: ~6 E" U4 o1 X
// schedule has a repeat interval of 1, it will loop every$ ]. U8 ~$ M0 ^. i, m
// time step. The action is executed at time 0 relative to/ w: E4 I2 i$ b; e4 Q
// the beginning of the loop.; S' H% T6 ^9 J. z9 S
* V9 ]1 n" D" C6 g+ U2 n
// This is a simple schedule, with only one action that is
& {/ v2 k: v' A: g& c // just repeated every time. See jmousetrap for more& ~3 F0 T$ X' O6 u
// complicated schedules.
* s: Z& h# l) `& n( U: q
( f- y, A' V: K+ C8 S modelSchedule = new ScheduleImpl (getZone (), 1); s* `0 x& y9 g. |, a
modelSchedule.at$createAction (0, modelActions);/ s4 c5 d7 h( A3 B
, @0 l6 O0 l: a w return this;) z4 M d, P- e* C9 U2 S
} |