HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
# t0 F5 x, H c/ k V6 p: v
# O2 {5 D. g5 S: M public Object buildActions () {
/ M! I7 I5 ~3 I3 } super.buildActions();! Q/ I4 Y1 d* C& K
2 R1 Q3 i3 s; x! Z // Create the list of simulation actions. We put these in
$ K/ [: M0 Z- n8 y2 b# W/ a // an action group, because we want these actions to be; {/ n/ U8 p _. l3 t3 M; t
// executed in a specific order, but these steps should
: A5 J. z+ l- T6 s: V/ \ // take no (simulated) time. The M(foo) means "The message2 I4 H$ C: h7 h2 k$ f
// called <foo>". You can send a message To a particular6 Q' C* b7 E2 C- g
// object, or ForEach object in a collection.6 c3 [; q+ m! j* W' n
) K, T" p. x9 W2 z- T
// Note we update the heatspace in two phases: first run' c2 W! j9 D* Y; G* [7 m! L M1 g
// diffusion, then run "updateWorld" to actually enact the
& K. d1 h) R: q+ O' l* a) c4 \ // changes the heatbugs have made. The ordering here is: ^$ t( ~' {2 }0 y8 y
// significant!
- @' h% _+ F; @ : n# w1 J# j- Z1 E) {/ ?
// Note also, that with the additional6 z3 @8 M5 I( j
// `randomizeHeatbugUpdateOrder' Boolean flag we can
! O1 ^+ z" B2 Y+ E8 Y // randomize the order in which the bugs actually run6 o0 w% F& R! \, A: R
// their step rule. This has the effect of removing any
7 S s# U/ a: Y; \* y$ U // systematic bias in the iteration throught the heatbug
8 F: k% v4 ^* D% C( i // list from timestep to timestep! V/ k4 H, c+ I
/ M6 x( ] M! o# k, k6 H; G
// By default, all `createActionForEach' modelActions have' \( G1 q b) s2 B( Q
// a default order of `Sequential', which means that the) t. h& a+ S, F% J
// order of iteration through the `heatbugList' will be
8 |$ V8 @" r9 Z6 W% K) j" F6 f7 O // identical (assuming the list order is not changed
3 V3 j; l* O+ O3 B7 N, i // indirectly by some other process).
# V2 N2 ?7 p0 W9 @3 o, h ; K. | }8 i& e M
modelActions = new ActionGroupImpl (getZone ());' d) R% q. l1 @3 j$ M
9 R J; u: H3 W* M. P( m" l try {5 K# V' F3 I0 S3 N* S' ]8 t
modelActions.createActionTo$message) Z2 {, b P* T9 _
(heat, new Selector (heat.getClass (), "stepRule", false));
4 q1 X" `4 T, Q } catch (Exception e) {: u% O8 F& C* d) ?8 z
System.err.println ("Exception stepRule: " + e.getMessage ());; M# O, h0 N. G# M. V* A+ L
}
2 A" G4 t- B1 @8 {+ z) u/ u
( `1 z9 m6 l) a) w try {
3 D$ s+ C. e: r# F J3 x/ n Heatbug proto = (Heatbug) heatbugList.get (0);
4 g4 ~* L1 I/ @1 X! q& h Selector sel =
% W/ I+ ]9 }1 T1 M1 ?! z new Selector (proto.getClass (), "heatbugStep", false);) v& i9 z+ p: B: F
actionForEach =; ` j) b2 v: K: X+ V: J9 H
modelActions.createFActionForEachHomogeneous$call- ]) k3 h9 p/ k
(heatbugList,
- d; w U( l g: l* ]& ^ new FCallImpl (this, proto, sel,0 t4 ]3 K& I2 e9 e/ n
new FArgumentsImpl (this, sel))); O8 D! {: Y- U$ s8 H8 C' E
} catch (Exception e) {
5 \6 J: _1 N: g: v e.printStackTrace (System.err);% d x, ?: [% Q ?2 w- l
}
& `; w" s. u1 `% ~& j
, Y- s+ x! K0 X syncUpdateOrder ();, r* ]4 q0 s& o0 @; `) ^
1 h$ Q6 q$ z, l% V2 M' y try {
8 Y6 h1 `( |. \& r D+ Q modelActions.createActionTo$message
$ D9 M6 P( j' h5 @( b3 F (heat, new Selector (heat.getClass (), "updateLattice", false));. R8 _1 m/ F5 l
} catch (Exception e) {
- y; e8 S. I9 s% q% q, M5 k/ b6 S& s0 Q System.err.println("Exception updateLattice: " + e.getMessage ());
3 w; U# T# P7 D& b- O: r, S }+ _ }- U1 J! v" p: P+ n0 f( e( f
* q9 t7 B/ v8 X- C# D // Then we create a schedule that executes the
& |, ]3 h& ~ o0 v& h! u6 E7 | // modelActions. modelActions is an ActionGroup, by itself it
; e e5 Z! _* I" k C // has no notion of time. In order to have it executed in
# ^" j# K( x& z. I V, w# H' ^ // time, we create a Schedule that says to use the \! M7 v& D4 ~! B- x
// modelActions ActionGroup at particular times. This( V$ s( V A+ [/ B* k$ ?
// schedule has a repeat interval of 1, it will loop every
0 L/ g# A/ Y" v! V" R1 r1 q // time step. The action is executed at time 0 relative to
0 ^% f; ?8 d- U5 i- z! r // the beginning of the loop." e0 q9 p4 Y* Z' ^+ {* k& u
1 E/ U/ b* Z$ o# ?$ ^
// This is a simple schedule, with only one action that is$ Z( l3 p/ j0 Z* V
// just repeated every time. See jmousetrap for more
" e H+ h$ t! D) T' B8 p9 o* a // complicated schedules.- ~0 S [2 ?, n* r. \
# A; j, X$ E4 T modelSchedule = new ScheduleImpl (getZone (), 1);
3 i7 o3 e; [; J. h( G modelSchedule.at$createAction (0, modelActions);% Z# p! ^4 W; H; ]) q! \
7 B' e1 t! d v' k1 \0 Z
return this;# Q K. I# K: I/ ~0 O% v
} |