HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
/ O! {8 R& \; |& f" l3 ^/ y: I3 E1 |
9 N8 N0 W; N# v4 n+ r9 ~1 u public Object buildActions () {
& H, T) n; T7 m super.buildActions();
# M) w0 a4 N+ W$ X" T+ e; q
) a6 o* o% k% G // Create the list of simulation actions. We put these in
$ V4 r$ ^4 Z4 n7 _8 n7 Y // an action group, because we want these actions to be5 n( T& x# X7 X' W& O0 ^$ V
// executed in a specific order, but these steps should
! {! I2 a( R* n/ i4 ~ // take no (simulated) time. The M(foo) means "The message8 N, Z+ X$ z( F$ a
// called <foo>". You can send a message To a particular; ]" N" j) {* z9 `: V) R# Z- D. r
// object, or ForEach object in a collection.1 Z/ d3 X% O: w; `0 \. {
/ E% i9 ^, U+ V3 p" J4 ~! \+ Z
// Note we update the heatspace in two phases: first run
* R; Q, G. c3 |! i% R n E7 g3 p' I% x // diffusion, then run "updateWorld" to actually enact the7 ^3 `1 c% F6 |" ?5 |
// changes the heatbugs have made. The ordering here is4 O3 F; _4 c& I
// significant!& N6 k& y) e0 A9 P, S& v+ F) a6 w
! Q1 [4 m1 L& Z0 {$ E+ U: D0 H // Note also, that with the additional; x; P! f' Y' k/ I/ |5 R
// `randomizeHeatbugUpdateOrder' Boolean flag we can
/ Z- j ^3 Y; T8 n& F // randomize the order in which the bugs actually run
. w5 s5 x9 Y$ U0 Z // their step rule. This has the effect of removing any
% G4 a% v2 p9 B1 G9 `# N // systematic bias in the iteration throught the heatbug
( e& q" e: X3 Y/ r( L0 Z( e# U1 t // list from timestep to timestep( z- D" k0 Y: r b1 a
8 m5 F6 Z! K, v# U, g // By default, all `createActionForEach' modelActions have0 n: k! D$ R- [$ o8 O
// a default order of `Sequential', which means that the
/ y. Q) O- o+ ]) [, _6 W' i // order of iteration through the `heatbugList' will be N- R# V# l8 P6 ~6 r1 Q2 R2 Q8 o
// identical (assuming the list order is not changed
) D; {: a3 C& e // indirectly by some other process).2 f p% n9 F0 t/ U9 h N7 F
& b' |' A9 B5 j7 j( n
modelActions = new ActionGroupImpl (getZone ());$ s0 l# A2 N; b. ^
H1 i- v5 J Z! c8 v/ l! ?
try {
: k+ f0 m; l& u modelActions.createActionTo$message" C" L" B* j. d+ K
(heat, new Selector (heat.getClass (), "stepRule", false));- A& [0 l7 a, d. W
} catch (Exception e) {
( R7 k+ B: o' u8 J% |" {; ?$ _ System.err.println ("Exception stepRule: " + e.getMessage ());
/ n; O' ?$ _8 g; ~ }+ M: i8 w" o3 d* |8 b2 ~3 M) ~
p: e; y$ d6 |/ x' P" z) G
try {9 T, r7 z! R& a( k4 ]
Heatbug proto = (Heatbug) heatbugList.get (0);
* t* U y1 G7 p Selector sel =
- f% m0 S9 G7 }7 ]( J% s5 P+ } new Selector (proto.getClass (), "heatbugStep", false);
, f( Q* r2 T& ^$ A. k9 `* v. p% O actionForEach =2 g! D$ K* e; J
modelActions.createFActionForEachHomogeneous$call) Y, i: ~5 u3 t6 q, d) G1 O* v
(heatbugList,
" V: J$ @- U+ J7 V0 D$ z! E new FCallImpl (this, proto, sel,! m& ~' p, U1 J
new FArgumentsImpl (this, sel)));- y' k5 |. ~# @( p
} catch (Exception e) {
, J, D: |5 u, J& [* |/ T e.printStackTrace (System.err);' D- U, S8 b. x' [/ Y
}- u' t9 W6 m$ W/ I6 W; y
3 M+ Q. F! _# W4 l6 [5 V' v E
syncUpdateOrder ();6 u/ h% @4 ^1 r7 m% Y+ D
8 E5 \. J- x4 Y- r
try {
. D% p( o) z$ B modelActions.createActionTo$message ) m2 p4 L$ g5 g! g7 _
(heat, new Selector (heat.getClass (), "updateLattice", false));
, @% u6 W2 ?! R% \/ z; _' Y } catch (Exception e) {
|; V5 l y- c7 a System.err.println("Exception updateLattice: " + e.getMessage ());
0 s( v0 q6 N1 g2 l }( P: y! [, m" [2 J: O
6 I; b! |7 G- {
// Then we create a schedule that executes the
4 N% n, C7 F% I) l$ U/ {% P6 {& m // modelActions. modelActions is an ActionGroup, by itself it
, o9 c5 i8 N! D- J // has no notion of time. In order to have it executed in6 |# ?% g/ n7 R7 V! J8 |' R6 J
// time, we create a Schedule that says to use the8 R2 {1 \+ @2 b) J9 v% V' x
// modelActions ActionGroup at particular times. This$ a$ E& {7 @9 I; O6 h. H
// schedule has a repeat interval of 1, it will loop every
* |$ X+ P" L1 A/ b7 ? // time step. The action is executed at time 0 relative to
5 i/ q+ E H. A/ D$ p8 _ // the beginning of the loop.. ~4 Y% C1 Q F5 n& j
) R" v: p' R9 [& n4 g) q. m$ j // This is a simple schedule, with only one action that is
, v. ~' w2 I3 k* H0 a" P* V // just repeated every time. See jmousetrap for more6 x' ^! X3 c) C+ n$ M5 {7 i P
// complicated schedules.1 V" Y" ?( W* s' a. y7 X
8 P# D/ I5 b3 `; A/ K: I
modelSchedule = new ScheduleImpl (getZone (), 1);! u0 H V% Z! ?7 T
modelSchedule.at$createAction (0, modelActions);5 [$ ]' a: V8 R6 ^# R* e2 l
+ F0 M; l a, l% M return this;
2 S/ l+ `" S2 {0 l. j* i, r4 L' K } |