HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:) d: K; K& i9 u1 F# M/ w
8 X/ g) F* a! D9 v2 c m" a& ~: h public Object buildActions () {1 _- Q) }( z) z0 H( U/ h
super.buildActions();
* J$ W4 G2 r; P 9 k# q4 ~$ [# T/ p9 M5 z/ C# X
// Create the list of simulation actions. We put these in% `% E- r/ p! c& Q+ a
// an action group, because we want these actions to be
# y" {6 t$ j& I( \ // executed in a specific order, but these steps should
7 k& B5 E( P! i1 t5 m // take no (simulated) time. The M(foo) means "The message
9 s, ?1 `( a) p* u // called <foo>". You can send a message To a particular7 O( V2 W+ M1 r" F' O0 f5 ?1 W
// object, or ForEach object in a collection.
& D( Q b8 O6 M8 g' o' s- N7 { . l3 u1 Z2 @$ a
// Note we update the heatspace in two phases: first run
: ?2 Y/ w# b' S) d, l& A // diffusion, then run "updateWorld" to actually enact the
4 L6 Z# r Z/ X9 I2 N // changes the heatbugs have made. The ordering here is
" Y. }5 Z; Q/ m H // significant!+ M% O; w4 A1 i' o
7 e3 q! w3 y, D* c8 b' n. _3 l // Note also, that with the additional% L( }2 Z+ v2 e3 @+ F) E
// `randomizeHeatbugUpdateOrder' Boolean flag we can) j( R/ i" R; l C0 ~; Q
// randomize the order in which the bugs actually run' P' g6 L+ m+ O# c: Q5 l
// their step rule. This has the effect of removing any' C" D* x: t1 [5 N
// systematic bias in the iteration throught the heatbug
, m2 B9 S+ T& P" ^$ b // list from timestep to timestep
: C! K8 `# f |6 |3 k. B
/ g! Q3 ~2 w' F1 u5 r# E0 A; T3 L // By default, all `createActionForEach' modelActions have9 d+ _& @1 A- B. Z4 v# d7 T0 U6 J
// a default order of `Sequential', which means that the u1 F: w/ L" d
// order of iteration through the `heatbugList' will be
5 g; |, ~: y; ^7 R( @ L // identical (assuming the list order is not changed
5 R9 w7 a# h; j% q5 {6 c9 G2 X // indirectly by some other process).5 a4 S" c3 A; G; t! p
9 N( M% E. W' N. I( W- A3 R
modelActions = new ActionGroupImpl (getZone ());) i' s2 x4 p8 \+ [3 t7 ?: A1 ?$ b
# z3 ]# U, B# s0 N try {
6 h5 l4 w0 j. b( s modelActions.createActionTo$message
, T7 q9 E* E, Z' S- L( W) r, q2 i (heat, new Selector (heat.getClass (), "stepRule", false));
+ e8 T5 Y: w z/ U& z } catch (Exception e) {9 O7 S( F6 }6 q3 c {
System.err.println ("Exception stepRule: " + e.getMessage ());' `. Z3 u: F- S6 U" R2 p" a8 X
}
0 T# k+ k- Q; e, I% J6 l" n' W2 \$ Z6 V
try {2 e) G2 q, b8 }" q1 M+ Z
Heatbug proto = (Heatbug) heatbugList.get (0);
( H7 t8 _4 M' `2 w, [' q Selector sel = 0 ?( F' t- J! ]4 g" D
new Selector (proto.getClass (), "heatbugStep", false);
4 L3 }1 R+ N7 }9 Q+ k actionForEach =( o; H" G3 ], c& y& J- w1 R' }3 |
modelActions.createFActionForEachHomogeneous$call
5 s' F% B/ q* ~# P( m (heatbugList,
2 Y% U1 {8 w( d/ D- x new FCallImpl (this, proto, sel,
+ D; `( K, o* T4 s, i% S new FArgumentsImpl (this, sel)));5 l! _ k" w. Y" u2 p( C
} catch (Exception e) {
6 I- F: |, q \6 L% m8 M e.printStackTrace (System.err);
$ c" g& i6 k/ O( W; i" [: x }0 M$ g5 c& K! m7 L7 W& W" u+ [# U
" [+ k" H4 Z- y$ [% L) a& G3 Y' ^: n syncUpdateOrder (); H* @/ }5 d2 w" K+ j
" S( ]8 J! c8 N; P L J/ Z
try {
" j1 C; C0 `+ ~7 t1 x modelActions.createActionTo$message
2 Z) ~0 S5 f3 c% b; R' r (heat, new Selector (heat.getClass (), "updateLattice", false));
' c0 Q9 d' D, S2 d* R% Z# B9 { } catch (Exception e) {* L0 g& p( r# N. M# K6 O
System.err.println("Exception updateLattice: " + e.getMessage ());
, }% ?: {7 q( E+ l; Y+ L* J* r }
2 ~2 K0 ]5 K7 q( d: g
( j6 ~, p- U+ X. A2 Y; k# n // Then we create a schedule that executes the! t1 t9 f8 d$ ^0 H5 o8 |
// modelActions. modelActions is an ActionGroup, by itself it$ h5 n" O9 E% r3 q9 N
// has no notion of time. In order to have it executed in$ R2 ]7 c" _2 h4 b
// time, we create a Schedule that says to use the6 K* F, t! d* r2 f* l: r
// modelActions ActionGroup at particular times. This
. [# h0 [2 Q6 y8 p5 Z3 _" _3 D // schedule has a repeat interval of 1, it will loop every5 h6 w1 }# V9 X, g2 o7 N+ a
// time step. The action is executed at time 0 relative to
. {. d: ~5 v) b/ [/ t+ l // the beginning of the loop.+ h1 X/ E, L" ~4 h0 ]% G: }
9 t4 O! B2 ?' p e$ R // This is a simple schedule, with only one action that is% C9 w+ U' f5 }; \9 \# _
// just repeated every time. See jmousetrap for more
7 ]2 W: i4 p+ @! l; z7 c- k // complicated schedules.
/ A8 c9 T |% o3 l 7 ]- N* b( G/ |' P
modelSchedule = new ScheduleImpl (getZone (), 1);& t( u# ]- R4 T. y1 `1 L7 Y
modelSchedule.at$createAction (0, modelActions);7 a0 N2 t! b$ d8 o: v3 u
O) t1 R% E! p3 \ return this;
$ ^- J/ O2 U4 }9 x } |