HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:8 D5 W: g; b: X/ P& F! T( ^5 ^
& S0 i( }- O0 n6 T% V' u9 o public Object buildActions () {
% e: ~9 M1 {, F1 x5 U super.buildActions();
& ~, X, ~( `% e3 q2 C/ e0 I U 1 t, U1 n- l$ j( m# W; {
// Create the list of simulation actions. We put these in
( V0 y8 K+ m& b; z, w9 x6 H, U // an action group, because we want these actions to be7 |! s$ `% J+ M+ v+ N
// executed in a specific order, but these steps should2 `) J9 M* n( u- ^
// take no (simulated) time. The M(foo) means "The message9 R; U- F. v; Z; O/ r! x6 a
// called <foo>". You can send a message To a particular3 z7 I* |- B! s7 E4 Q* R5 K
// object, or ForEach object in a collection.
/ z7 D) P5 }4 @3 A B; B
6 L, X& B" E- A& z. X2 q // Note we update the heatspace in two phases: first run
! {- g# ?$ r. D5 b // diffusion, then run "updateWorld" to actually enact the
% y" h/ a& w( y$ Y // changes the heatbugs have made. The ordering here is
( k! E1 K1 h5 C. H) p/ I // significant!
2 t5 Z' Z! p+ z% x; W. u$ O
/ d3 _9 p$ }+ P. x1 Z8 X! ^- b // Note also, that with the additional; P; X2 N2 l3 D6 C6 N/ c
// `randomizeHeatbugUpdateOrder' Boolean flag we can, g" s( _0 `! J/ L9 v: k. Z# K$ C' d
// randomize the order in which the bugs actually run
4 j4 X6 ^2 e$ F% k5 ^- g // their step rule. This has the effect of removing any" i( `" J) H6 q+ O) m w
// systematic bias in the iteration throught the heatbug( F; k9 e( n) r" ?9 ?5 J! {) O' C
// list from timestep to timestep
3 U: K+ T7 g1 A/ e8 v/ h1 v" y : g; T! j- H+ G3 L
// By default, all `createActionForEach' modelActions have9 w8 F/ L% \, z: |1 O& [7 S
// a default order of `Sequential', which means that the
5 Q+ [* r$ Y* B. N# \ // order of iteration through the `heatbugList' will be
; I5 I7 V; N c- v3 p // identical (assuming the list order is not changed
: `6 Y* t4 H2 M g* W2 Q. I. G // indirectly by some other process).9 S, q& \- x( M+ h8 M v8 S
! ]. O, F8 O, V modelActions = new ActionGroupImpl (getZone ());
! E7 b9 M$ }, Q/ b2 F" Z; n" h! ^# w6 G! z3 ?9 M6 A5 D3 V q& p/ L
try {- M6 g c2 O$ b& a d
modelActions.createActionTo$message
% S: P; }3 t3 Q& s5 K' J6 R (heat, new Selector (heat.getClass (), "stepRule", false));
$ N4 r! J* M" n9 w `& K9 W } catch (Exception e) {
/ c' Z1 Y3 ~" h% n- G& w( S2 c System.err.println ("Exception stepRule: " + e.getMessage ());# A/ n9 w/ [$ \0 ~* {; ~
}# ]% @4 a- l7 ]" f# `7 i& m5 `
. ~. d; q, Z7 H: u try {: \9 D" P4 k; n% F9 |* Z" R
Heatbug proto = (Heatbug) heatbugList.get (0);+ h9 W$ E( H7 ~+ Q1 F
Selector sel = n. V9 U# z, e" C
new Selector (proto.getClass (), "heatbugStep", false);% s j& d" j' M$ ^' e: c& ^0 m$ v
actionForEach =
$ Y! r: ~% ^" Q3 V3 Q) M modelActions.createFActionForEachHomogeneous$call% Q3 K# X" j* v' \, b# M: H
(heatbugList,
4 D3 f2 n3 ~- ?: ~7 ]6 F' {% a new FCallImpl (this, proto, sel,0 ~+ I+ I# S% T+ W- S1 o' H
new FArgumentsImpl (this, sel)));
5 @; K' x0 r9 ?% v% F6 `2 K } catch (Exception e) {2 N. F; K) _1 L; c
e.printStackTrace (System.err);
) x1 T7 |; q% B" h }& P: i8 ^) `5 S+ O
" D1 E% R7 u D2 F& _% U7 v0 m syncUpdateOrder ();" C0 ^- i1 r7 T. i; B
9 F! y* b$ `9 X) n7 s* D
try {
# b" \9 X3 j3 X& [3 ~ modelActions.createActionTo$message
8 m$ w2 `/ J- T: D+ ` (heat, new Selector (heat.getClass (), "updateLattice", false));
& t9 |( G6 |7 L- o# q3 ?+ C/ I' B4 o } catch (Exception e) {; T7 [9 K- `( p Q8 q) {
System.err.println("Exception updateLattice: " + e.getMessage ()); K1 e7 K* o3 [8 Z" ]
}8 H1 S- c1 y! C P( A
( b3 X1 u/ ?- s // Then we create a schedule that executes the/ T9 j: n4 I1 y: {" F' k8 P
// modelActions. modelActions is an ActionGroup, by itself it
& r, Z6 w7 N9 h7 t& k+ g8 O8 `, u // has no notion of time. In order to have it executed in/ ]. _; ^; b. E
// time, we create a Schedule that says to use the* B2 u& P) y" s6 t$ ?1 ]" Y) {
// modelActions ActionGroup at particular times. This
8 E3 a: v6 A8 M& P% z! Q9 [ // schedule has a repeat interval of 1, it will loop every9 |% W" B' w; k2 F% [
// time step. The action is executed at time 0 relative to
) ~7 y6 A' n& k* T2 w2 N // the beginning of the loop.
. I3 B7 {. ]& `, q9 ~+ a
& _6 d% M. _/ g/ n3 q // This is a simple schedule, with only one action that is) [2 T4 G3 z" I+ e" [# M" r
// just repeated every time. See jmousetrap for more+ U3 M, _% S5 v; o7 A* q. E( \
// complicated schedules.
0 O2 \/ U! i& ?4 a / m, R& ~3 C/ ]) P5 v
modelSchedule = new ScheduleImpl (getZone (), 1);
8 N, _3 P+ N8 _& [9 v0 }& L0 I% X modelSchedule.at$createAction (0, modelActions);: L% O0 t7 Z- B, @6 V$ X3 D
+ e. B' D5 ?3 j& @
return this;
# ]& d, d$ C8 C1 Y m. I } |