HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
: ]( R/ z+ P2 ?0 i0 \- u! D$ W% c8 s, Y+ U( m; |" `# j! _ n; V4 o. U. O
public Object buildActions () {1 c7 a: y! P @" D0 X/ f$ K
super.buildActions();
5 r7 E4 r% y. M8 |" r, k- u/ M
8 t! D G& d4 W, }' F5 j4 | // Create the list of simulation actions. We put these in
* Z [; K- [( U1 O // an action group, because we want these actions to be3 D; U3 ]2 L9 ?! F( I
// executed in a specific order, but these steps should
2 O9 W' }' [7 B/ o# C; k // take no (simulated) time. The M(foo) means "The message. z8 m0 I% O6 j4 R9 S4 A
// called <foo>". You can send a message To a particular z. x" v, I5 j
// object, or ForEach object in a collection.
0 }. \: M5 i: ~; o Q
, j" k$ f; K0 X$ ?: n // Note we update the heatspace in two phases: first run# o6 `" |5 O& j# z4 i
// diffusion, then run "updateWorld" to actually enact the1 F: _$ U! |9 m' c0 i( X
// changes the heatbugs have made. The ordering here is l3 n$ `# p0 O; |1 l
// significant!0 y6 E( @) S/ J/ a
) M2 w) h0 V3 A( c$ E$ [
// Note also, that with the additional, o* D/ z4 H K8 Y' B' A6 b
// `randomizeHeatbugUpdateOrder' Boolean flag we can
, H r7 W" ~: W4 ]* }' f7 P3 w) U // randomize the order in which the bugs actually run0 _9 k; o( }5 a% Q. \6 S
// their step rule. This has the effect of removing any" v6 e2 s4 D& ?8 T3 e) o* N
// systematic bias in the iteration throught the heatbug
# j' _# I* k/ c/ B // list from timestep to timestep
; I0 c7 g0 t2 h* [, q: e! O9 t9 n1 y
. E6 {& c, \5 R- p$ |5 `1 o1 b // By default, all `createActionForEach' modelActions have
0 J: c1 L% Z8 Y9 c // a default order of `Sequential', which means that the# y* M8 A( m8 U8 T# F
// order of iteration through the `heatbugList' will be6 Z6 O5 K2 i4 l5 N/ |7 f1 m
// identical (assuming the list order is not changed
* t: A5 ^( A$ S4 ]( q8 M# I/ R) E- [ // indirectly by some other process).
8 j( Y9 q" q+ G# D1 T" J7 @
* V3 b6 K7 T% G* z" p modelActions = new ActionGroupImpl (getZone ());
) j. {( c8 @; Y" X
0 x5 i3 C, K" B8 {$ L! ~# y: ^1 Y9 s try {' z N$ o x$ _: e7 O' T2 @; d. r& Q# s
modelActions.createActionTo$message0 o2 \, z! n+ E, I7 s3 ?( r
(heat, new Selector (heat.getClass (), "stepRule", false));
% {' A3 r3 X( p" R3 N' q. Z } catch (Exception e) {/ a2 I& D5 v, G+ L5 r# D& Y
System.err.println ("Exception stepRule: " + e.getMessage ());( X' T J1 \% h0 H; g; W. Z, g
}
; R3 v1 e6 Q+ D/ ~' O' y4 ?7 l+ a
try {* I! v. k- [) ^" a2 W) N- \
Heatbug proto = (Heatbug) heatbugList.get (0);
) z/ x. K4 N. Q/ F) Y1 a j7 I( t Selector sel = 9 Z3 i( O" `( v& ]- W5 b8 H. l
new Selector (proto.getClass (), "heatbugStep", false);
( d+ J U' h) e; x+ O8 [ actionForEach =
3 U* l# V: G. t( j4 | D* t, M modelActions.createFActionForEachHomogeneous$call" F/ i! C5 L, C0 ^& d6 l$ k' {
(heatbugList,# M5 z- o* r1 D, v8 n
new FCallImpl (this, proto, sel,
$ j. @) v' `* {0 J/ o' v" a3 }) g* Y new FArgumentsImpl (this, sel)));) z" Y( x G! I
} catch (Exception e) {
1 b b8 U1 O3 o" l Y( ?% L e.printStackTrace (System.err); \% h, L0 K9 E- `
}* ^; L* e/ ]; x
5 d* C3 N) c& n2 f( V: V
syncUpdateOrder ();' n% f, p4 w3 ]2 E$ b, e; l8 M
% T5 f# e9 d( t& C9 d try {
4 x( L9 e9 M% F% X) f! z modelActions.createActionTo$message
5 ?1 G S T0 Q (heat, new Selector (heat.getClass (), "updateLattice", false));
1 E& b. e* i- D9 R, H } catch (Exception e) {
5 `4 ?& o) ^# q. I8 y1 m0 |% z# T System.err.println("Exception updateLattice: " + e.getMessage ());4 }& n) | ?- A7 X( y9 W
}
0 P5 J9 N% z) N& D5 P0 E
/ }3 X0 V& b* ?: b, f* V // Then we create a schedule that executes the2 ~5 I, K4 Q" s' y
// modelActions. modelActions is an ActionGroup, by itself it" \& X( u1 l: h9 M
// has no notion of time. In order to have it executed in5 r1 ~6 o* ^6 C( l" ?
// time, we create a Schedule that says to use the$ T2 N4 @" K8 ?, K; Z9 K- t
// modelActions ActionGroup at particular times. This
! ?. E! g8 O" `3 t5 E // schedule has a repeat interval of 1, it will loop every0 Z/ Z3 }8 t8 M. l' g$ }- p
// time step. The action is executed at time 0 relative to
/ H$ P& f* _2 r; M% [& I, w# I // the beginning of the loop.
1 M) x% {9 S! M! w7 V' R: y4 Z: ?' l6 c- Y% M" p' t' U4 I' K
// This is a simple schedule, with only one action that is' d2 }& i3 d; M ^* m* S9 a
// just repeated every time. See jmousetrap for more; C4 \" e; K6 C2 o$ u
// complicated schedules.& E* \ P( H! Z1 o. g' t8 |0 X
. O( f* O) r8 U: o/ K t4 V" a, ]9 |
modelSchedule = new ScheduleImpl (getZone (), 1);$ N* E( N5 D1 N3 G: M+ L0 n
modelSchedule.at$createAction (0, modelActions);
9 W; A! H l/ c+ \1 y8 W
3 z* F+ ~- `9 N$ I. H$ i return this;
: ?$ O9 L8 l1 ~# C5 a1 p } |