HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
/ k& R/ g* ?% M4 A9 z
! z( ^! h7 A/ y* J, Y public Object buildActions () {
0 s2 r1 j+ L: P, H2 ]7 a8 Z- k super.buildActions();
( ~8 F% {) q2 @& t) N' I+ N . P/ D3 f. w: U W4 m2 A
// Create the list of simulation actions. We put these in
5 @. s' {5 r7 l3 u // an action group, because we want these actions to be2 x- g; L, R* \
// executed in a specific order, but these steps should6 K' y) O9 z; [# q
// take no (simulated) time. The M(foo) means "The message3 Q% a8 L! T7 E7 L
// called <foo>". You can send a message To a particular
/ V$ q4 N4 ^- k4 i7 v8 J9 X // object, or ForEach object in a collection.
8 f+ y g. t) u8 R! V' o8 Q* c ' b0 R8 F `' X& ~! \
// Note we update the heatspace in two phases: first run2 K3 ~4 h( }* \2 L! A& `
// diffusion, then run "updateWorld" to actually enact the2 o( X- R: ]& x2 Z7 F* g% L
// changes the heatbugs have made. The ordering here is3 F; @" Y5 w! Z8 p
// significant!
1 ^' H7 j' u* G
8 S6 a. c0 ?$ K4 k6 F9 ^% r // Note also, that with the additional4 B9 d2 q: Y$ X0 ^
// `randomizeHeatbugUpdateOrder' Boolean flag we can% x1 \4 J, V7 N# u
// randomize the order in which the bugs actually run% T) q# B5 ` h& S& n" @+ ?2 p- e
// their step rule. This has the effect of removing any$ X; V$ \% }: h* t
// systematic bias in the iteration throught the heatbug
- @0 N6 j6 R! }* @4 D$ s ~+ e- ] // list from timestep to timestep! O6 L1 ~$ G+ T4 y1 f# {
& K1 z- n) n+ i2 q0 L- m" y) C# o$ N
// By default, all `createActionForEach' modelActions have
/ p3 v. x; w8 f. p. A$ `' _/ @* s // a default order of `Sequential', which means that the
6 c3 H! W" ?8 x // order of iteration through the `heatbugList' will be, m( d3 z5 C! u; B6 @4 @& }
// identical (assuming the list order is not changed
! L2 h! l1 }8 e9 b0 x N5 Y+ f // indirectly by some other process).
2 k6 }0 L% d7 z4 S
% ?8 {) A7 \8 Z! g# r/ ^( b modelActions = new ActionGroupImpl (getZone ());
0 ?6 {) Z' ? I6 e) M, U h% W3 Z! x2 X* q& f# c8 _
try {3 X) m% o/ P* z/ T, Q* O, D5 I
modelActions.createActionTo$message, g1 }# O, I2 U4 H2 L# U
(heat, new Selector (heat.getClass (), "stepRule", false));* O) H# D5 [& ?& }# i" f1 B& ]7 G4 |5 x
} catch (Exception e) {6 U. _4 f) e5 e! ]/ ?& V+ T
System.err.println ("Exception stepRule: " + e.getMessage ());9 t. B, }& ]" }
}
$ O8 |8 D2 H- x$ M- Z
; [/ r8 L6 U$ d% H i try {5 t1 n0 [: \. x6 V6 G
Heatbug proto = (Heatbug) heatbugList.get (0);# O6 r8 ^+ C7 m
Selector sel = % d( |2 u( \( Y: f1 \
new Selector (proto.getClass (), "heatbugStep", false);
5 |7 ]9 z" b p3 S actionForEach =
+ H# a5 R H& P% S4 G modelActions.createFActionForEachHomogeneous$call% p$ h( V) r% ]! F, @! A; \
(heatbugList,
! n3 G) s' L1 Q/ ` new FCallImpl (this, proto, sel,1 A5 T% s4 C7 x0 \) }5 r: C2 s
new FArgumentsImpl (this, sel)));" c9 ?8 Y, T+ d- s; `5 R& I
} catch (Exception e) {
! s; a w& Z5 `4 @9 e e.printStackTrace (System.err);
6 p4 ^1 |! W: y7 {1 f }
B; b, d9 t( p ~9 ] W9 ^ ! C* k; o& l1 b3 \ s" P
syncUpdateOrder ();
% Y% p# i% X# f# j: l: S
3 Z& }& U& k/ b- t try {
+ b1 ]/ @; |% J. O- O modelActions.createActionTo$message $ u, W4 } x4 E: J( Q* G8 u
(heat, new Selector (heat.getClass (), "updateLattice", false));
0 {: L8 h% O! {- L } catch (Exception e) {
/ ?; a9 `. t2 ~0 I- V" W System.err.println("Exception updateLattice: " + e.getMessage ());9 U7 ^, k7 i6 {6 J
}5 B. x" Q2 ]5 r, a. I" n6 s8 [
8 }6 y. U2 q5 i6 M( U8 r
// Then we create a schedule that executes the
) u5 r! V/ P# \ // modelActions. modelActions is an ActionGroup, by itself it! A. o. Q8 N3 E: n. c2 ~' G
// has no notion of time. In order to have it executed in
( u( |: X* g5 n5 e* v9 }+ E5 U // time, we create a Schedule that says to use the! D- \1 c! W/ _6 D; m% e, i
// modelActions ActionGroup at particular times. This
. f1 l9 j K! D/ b // schedule has a repeat interval of 1, it will loop every
8 Q! [' L5 L) {# k. a0 v // time step. The action is executed at time 0 relative to
! o1 t* e( {0 ^/ P0 b // the beginning of the loop.- c8 }# ]/ m1 \! T& P' Y" `
1 {5 k4 e3 T0 ^ // This is a simple schedule, with only one action that is
, G6 y: K$ Q: e' c // just repeated every time. See jmousetrap for more; x: Y x) v+ S& A9 k
// complicated schedules.0 ^* Y3 C; Z6 @& q. \! n) Q3 d
; X3 K3 ^, O& R1 m* V; p" Y# L3 f% c modelSchedule = new ScheduleImpl (getZone (), 1);
+ t4 v1 F' p/ S O8 ]1 {) Z modelSchedule.at$createAction (0, modelActions);
' L2 _2 ]7 A) }- l ! X; c$ s! @# }( B( L
return this;2 X# J, D. j) `9 v+ G2 P
} |