HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
. N3 i2 Z+ O' m$ d$ P$ x# D% P; b$ l
public Object buildActions () {; j8 h$ Z" s9 h7 U: U" ]9 v$ [
super.buildActions();( ^' O( v) h/ ^9 }3 z' a
: e% @8 n% q# N. a // Create the list of simulation actions. We put these in
6 R8 o2 U/ f. j+ m // an action group, because we want these actions to be: D& Y: d# k" R7 @9 b
// executed in a specific order, but these steps should
1 m9 g0 p S9 {0 l( j6 Z7 [ // take no (simulated) time. The M(foo) means "The message8 i/ u& ]6 ?1 ?% j# v& W5 p; f
// called <foo>". You can send a message To a particular
( E9 J/ d$ s0 V7 A* t* v4 X) E // object, or ForEach object in a collection.
/ T, B# f8 A- B Q( _9 r , ]/ A. C4 y l* c- `+ f
// Note we update the heatspace in two phases: first run
2 b3 B; ^2 I, Y) f% I! {% V! n3 y // diffusion, then run "updateWorld" to actually enact the7 K" l( I$ d( o3 s
// changes the heatbugs have made. The ordering here is
, B' ?' e# L4 Y1 G* J2 w // significant!
) i# @4 X) @1 I" `" |" X0 H! U b
3 b8 ]3 ]- f( t& b5 @, l // Note also, that with the additional
0 g) a! _$ v' U // `randomizeHeatbugUpdateOrder' Boolean flag we can9 y- n# r! u( `
// randomize the order in which the bugs actually run
" |2 c/ M7 B# ?/ G! u/ p9 _ // their step rule. This has the effect of removing any% b' n9 d9 T* P: w
// systematic bias in the iteration throught the heatbug1 I6 {7 j) x; b
// list from timestep to timestep
0 Y, o; a" w- e9 M
8 Q: b' O% Z/ f // By default, all `createActionForEach' modelActions have. P0 D% b9 M. @) L
// a default order of `Sequential', which means that the
% K9 \# l" d! {( _) ? // order of iteration through the `heatbugList' will be
/ T4 A$ ~# B& y( ^7 Q [; h // identical (assuming the list order is not changed
, v8 l7 }: |+ m* I) }7 X // indirectly by some other process).
$ z( S8 c# F, n# f5 T( U $ M4 _ q5 v' n2 v% z- F0 ^/ j
modelActions = new ActionGroupImpl (getZone ());
5 _$ _" M6 T6 n ?- k6 z
* `! \6 j% B _ try {4 H1 I. T1 k7 @: I
modelActions.createActionTo$message3 n d3 B! j" L( q' m) ]
(heat, new Selector (heat.getClass (), "stepRule", false));) c; Z% x! ], }/ B' l* K* p
} catch (Exception e) {. b* N6 C# g4 G. k' P
System.err.println ("Exception stepRule: " + e.getMessage ()); Y7 \3 @- n2 \
}
/ W4 `. g( f$ y: Y) w8 Z* I% V+ t2 K; e0 c/ i2 q( }
try {
# C# b, E* S2 k" G% o: D5 [. n Heatbug proto = (Heatbug) heatbugList.get (0);
2 [% V! n b/ r9 _0 I2 ] Selector sel = : ~, P8 q# F2 g' r0 V: P2 B
new Selector (proto.getClass (), "heatbugStep", false);* B5 \2 Q8 x$ d: c6 e
actionForEach =
3 s- Q' p) r9 f" u modelActions.createFActionForEachHomogeneous$call$ ?' O2 e f. ^3 E- `
(heatbugList,
( M) {4 O1 O& N; G7 m2 Q new FCallImpl (this, proto, sel,5 H; O2 R; E$ C& j
new FArgumentsImpl (this, sel)));# ]6 }1 p1 L+ I& F* O% k
} catch (Exception e) {+ F( P+ B) I, ]; z7 }$ N
e.printStackTrace (System.err);
- N9 _/ J5 c3 d( [, o/ K }
" w8 l1 _3 c- x9 m- n+ W; A! R/ f, R( u : X, j6 B4 U ~8 X
syncUpdateOrder ();
5 t# d6 q# J: ~
1 }9 q' b" v) ~( z$ `3 H try {" m9 }/ M% O- `8 J
modelActions.createActionTo$message
$ D" H# Y+ e+ T- q: H (heat, new Selector (heat.getClass (), "updateLattice", false));
3 R! K0 D% N# `+ d7 M8 ] } catch (Exception e) {
2 G7 a% ?' ?; q6 d3 L+ `5 k System.err.println("Exception updateLattice: " + e.getMessage ());
3 y. E$ _! D6 p% e8 x: @7 }* y& i }
* t7 @( `/ Y$ q) W# }5 K
9 H7 ^% e: @7 N! ?; I // Then we create a schedule that executes the
r9 N9 ~7 ^: R0 J7 m; x$ j // modelActions. modelActions is an ActionGroup, by itself it
Z( I! A/ w, h/ P // has no notion of time. In order to have it executed in
, m l1 W' X! u" f // time, we create a Schedule that says to use the0 \) C1 i; g( h z4 ?
// modelActions ActionGroup at particular times. This; t- G' U% c; o \4 l
// schedule has a repeat interval of 1, it will loop every: h3 ]: b6 W) S& \9 f) m8 q; e
// time step. The action is executed at time 0 relative to% p' ^# O* G1 u2 s. ^6 w
// the beginning of the loop.
7 w5 V- i( O5 e$ c1 P& l$ L( ?8 D2 R2 D+ Y; O1 N6 f
// This is a simple schedule, with only one action that is
+ M* Y; C2 v2 ` // just repeated every time. See jmousetrap for more
" {! T# P: d1 n; p9 Y* e# p // complicated schedules.
$ m' u% p# K4 @7 ?/ ]1 z* i 9 O) w. B& A) K. Z9 _; N
modelSchedule = new ScheduleImpl (getZone (), 1);3 u0 R2 W) [6 R& m- h7 h" r/ A
modelSchedule.at$createAction (0, modelActions);
6 k, _0 p. q* K9 A% j1 N, Q
8 G- p6 Q {7 U" \# g; c return this;
6 l! K/ O0 F5 b' S+ _6 u } |