HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
# O3 `, ^# Y: Q$ T2 [6 l2 x. |0 p" o$ z6 L$ |7 `
public Object buildActions () {
; K& ^# S4 _$ h0 N4 c% L: J9 S6 A super.buildActions();3 J3 s6 u/ u% F# E7 B
1 o- r: A; {# D4 C! y1 `0 m
// Create the list of simulation actions. We put these in
7 @ X* }' I, d% g // an action group, because we want these actions to be
4 v& M+ T& h0 G8 T C // executed in a specific order, but these steps should$ R Z% Y( T* x: h( k7 m6 S+ {
// take no (simulated) time. The M(foo) means "The message+ [( p( z( W! A
// called <foo>". You can send a message To a particular
+ Z% B2 u# V- J! ?0 S // object, or ForEach object in a collection.
/ x/ H# a- t9 R7 U7 k9 O , j7 x4 F* L; O0 M: Y* P1 b
// Note we update the heatspace in two phases: first run* W" Q2 l3 V3 k8 v1 _' U+ J+ a
// diffusion, then run "updateWorld" to actually enact the
+ E' Y# ]; V' d) i // changes the heatbugs have made. The ordering here is
+ I4 O, t, Q3 b- }; @1 a7 Z7 G0 S/ ^ // significant!0 R4 X* T X0 m+ t3 q! v! j8 m- u
: O" q8 @1 L' T8 ?& N
// Note also, that with the additional
1 \* s# @! m2 s) I& C9 s$ H // `randomizeHeatbugUpdateOrder' Boolean flag we can
1 i# K. w. K3 j+ K, f // randomize the order in which the bugs actually run
, Q" Z {% ~7 T+ B( Q9 t* w7 b // their step rule. This has the effect of removing any: M' ?0 w0 z: ]
// systematic bias in the iteration throught the heatbug, j4 I! y: `* f
// list from timestep to timestep
, p% u0 F; j8 v6 o3 p1 Y! T 3 ^7 p) W2 C6 L" n w& ~
// By default, all `createActionForEach' modelActions have
1 q! j! x/ j4 Z4 b8 k6 B // a default order of `Sequential', which means that the
5 ~) C# D; o: }" b# Q4 |. F // order of iteration through the `heatbugList' will be
5 d0 q! t4 ]8 p+ D+ a% C! w6 B // identical (assuming the list order is not changed
, f! ` {! B H" D: e2 J // indirectly by some other process).
! {/ c6 B# X* j6 C& f 1 {! h( C7 F! S7 |3 {8 d
modelActions = new ActionGroupImpl (getZone ());
5 Q0 P* B4 V1 F! J$ V1 Y8 _; R! G. r0 c, p4 ?5 N; \3 ^# @ x! f
try {
( i l7 \6 M4 W \, J+ T" ~ modelActions.createActionTo$message
" ~3 _8 k$ A8 G (heat, new Selector (heat.getClass (), "stepRule", false));
! b( w+ b, H4 \+ U* A! } } catch (Exception e) {- c8 n" Y7 d/ W! F8 }" _. n
System.err.println ("Exception stepRule: " + e.getMessage ());" _1 {+ W/ M0 E' z, j1 _$ }
}
5 e% S! C; H: I5 j) t
" x: ^3 b" y% R) p+ P; ? try {
3 m# w; S1 N# U Heatbug proto = (Heatbug) heatbugList.get (0);$ K' |- I0 u1 n2 a+ a9 W
Selector sel = $ h5 X5 Y4 h$ U0 F; z! `
new Selector (proto.getClass (), "heatbugStep", false);( x+ F. p1 A" K/ C6 D" e. y
actionForEach =
2 H3 }' h$ M; @6 R5 o. M modelActions.createFActionForEachHomogeneous$call
# W( }9 m9 r1 p- y (heatbugList,
1 P1 e% I! u, A' D- G new FCallImpl (this, proto, sel,+ f4 K! f6 K4 I2 C; @
new FArgumentsImpl (this, sel)));5 r; e/ k9 k( N& ~# M# O
} catch (Exception e) {
: I) i- c; O# T, u+ u e.printStackTrace (System.err);8 j @! |2 \; n; g( ? ^. X
}
9 c$ h, K) q, _' F ; y. f: y/ g4 K1 Y
syncUpdateOrder ();0 j4 p$ N( E4 W+ K
% l' m9 n5 _* E
try {0 b' u2 Z$ D% Y' B1 d- z
modelActions.createActionTo$message
0 @* _( q2 n# B% z (heat, new Selector (heat.getClass (), "updateLattice", false));
0 b" L7 ]& I' w' B# c/ ]8 ? } catch (Exception e) {
2 n. ~# Z; I7 E5 M System.err.println("Exception updateLattice: " + e.getMessage ());/ J# U& a' k/ R1 k
}- O0 z, w( p4 s( ^9 h& F
" B1 y- b: | q5 o' {
// Then we create a schedule that executes the
0 Y( X& W1 d/ [9 i& [ // modelActions. modelActions is an ActionGroup, by itself it
' E9 V% q% Z3 j* W // has no notion of time. In order to have it executed in/ l# R' `/ Y* Q" [
// time, we create a Schedule that says to use the9 l/ U2 Q# _ j; Q. K" U
// modelActions ActionGroup at particular times. This
; u/ p& V- x' J# I8 x8 f" L9 A // schedule has a repeat interval of 1, it will loop every
, m \' D" x* m4 j // time step. The action is executed at time 0 relative to5 Q5 ], ?& f+ ^% W3 t$ G' h" s" s
// the beginning of the loop.. l) ~% E! Q( I1 {1 T9 W+ e; i# r) E
9 p4 r3 R% p8 e1 O. [ // This is a simple schedule, with only one action that is) R" V6 w& f3 b5 l
// just repeated every time. See jmousetrap for more% c5 u1 \, X4 g& G. Q6 r) Q
// complicated schedules.
# i2 a, }5 d4 R/ u4 n
$ m( v2 g* q! L modelSchedule = new ScheduleImpl (getZone (), 1);
: x+ i. @! ~( `( M- i' z modelSchedule.at$createAction (0, modelActions);, e5 x. B: g6 n6 J1 t0 R
4 M. f4 i/ S+ x7 J A( }
return this;
. M( ^; r" T! T } |