HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
* W0 g6 o* g+ P8 b+ s* x/ Q8 P" `0 ^8 r0 B. J4 g
public Object buildActions () {
) H$ h0 x3 @3 e) z! H# _$ m D super.buildActions();6 c/ y b# S. R8 T1 Z: [+ ^7 C
) p& _" f. Q# O: r // Create the list of simulation actions. We put these in
* E& }) i6 k9 R1 `3 ?" V // an action group, because we want these actions to be# ^( k3 Z g; b
// executed in a specific order, but these steps should( {: w& ]) y7 a- A% [$ ?
// take no (simulated) time. The M(foo) means "The message$ K6 W5 a* d3 G4 x) t6 t0 V
// called <foo>". You can send a message To a particular( l/ V6 o- {8 v1 v8 f
// object, or ForEach object in a collection.! y/ b0 ^5 Z1 t- v9 x: q! Z+ B% B
7 Q1 a0 Y! ?; L3 X5 R5 `( R5 y
// Note we update the heatspace in two phases: first run
2 \1 ~, K8 B, k: h3 ?/ B$ I" I // diffusion, then run "updateWorld" to actually enact the& r9 Z2 T' Y$ A- v- q/ ~0 Z
// changes the heatbugs have made. The ordering here is7 S' b( ?3 k' O& J, K( p9 _
// significant!
0 U+ e1 ~6 Y0 V+ u2 p/ J6 m2 O
% l$ u3 r3 A5 b8 p: o // Note also, that with the additional
8 F. j/ @' ^7 ^& E$ a# z9 K9 G // `randomizeHeatbugUpdateOrder' Boolean flag we can1 a. e8 ^! v& a0 [, ?$ T
// randomize the order in which the bugs actually run4 `& O/ ^! D3 Z! \% r' j
// their step rule. This has the effect of removing any
]7 C: z( A; h9 S0 u9 x ` // systematic bias in the iteration throught the heatbug
+ R! d" E# K" W# q$ W // list from timestep to timestep3 ~7 a$ R) i8 R& b8 D/ {- M
4 }# r' W4 j, D( d
// By default, all `createActionForEach' modelActions have
8 U8 _' e7 ~4 D: j! V6 S. J8 v // a default order of `Sequential', which means that the3 A3 Y3 M* s8 E, g7 |
// order of iteration through the `heatbugList' will be
! E; ?; a" b% G2 z4 T9 q4 n$ K$ K // identical (assuming the list order is not changed
2 ]; V) y3 v* U) H9 j // indirectly by some other process).. E; ?8 O m' `$ X
4 e4 ?! o8 {6 l4 \- G" E6 d; |
modelActions = new ActionGroupImpl (getZone ());
* E f9 z& l0 ^
$ V! Z1 F5 z( t8 P try {
1 `$ @/ m& z g8 x modelActions.createActionTo$message/ q. L- h9 D+ \/ B" k7 N) p
(heat, new Selector (heat.getClass (), "stepRule", false));6 h7 Y' v+ w/ s& k" E5 }
} catch (Exception e) {
- `+ `# N$ i7 |/ j. R System.err.println ("Exception stepRule: " + e.getMessage ());+ ]" q9 I3 k& v- O2 J6 k4 {
}
P7 C5 h. E8 X, }: w, P" @+ _3 r1 g; F* \
try {6 K1 b/ K5 g/ s% A, Q& {- `
Heatbug proto = (Heatbug) heatbugList.get (0);, U/ l& [7 i3 b- S( m" B# t+ P
Selector sel =
8 R0 M- s1 K8 [ new Selector (proto.getClass (), "heatbugStep", false);/ ?% f# m: r) D9 {% |1 o- a$ s( C
actionForEach =
. o" B7 N' O: n1 u! x8 X5 M modelActions.createFActionForEachHomogeneous$call
9 K/ h$ j; T4 u( | (heatbugList,
% M. z* a; X- N$ O new FCallImpl (this, proto, sel,
- ?/ Q6 m7 _/ t) z% X3 e new FArgumentsImpl (this, sel)));9 Y' u% R) x+ M0 \" L3 k( m
} catch (Exception e) {/ [& ]& N: t$ C! i; C: f5 p
e.printStackTrace (System.err); [: C3 V. P4 y
}& j6 [& C- a( ^% V. Q4 i" ^
; r7 ]/ C- v! T& [" w; g" W; X; d syncUpdateOrder ();' M, f" t [6 E; _9 `; w. h
, X4 Y* r/ ^& y
try {
! @' p! o$ \% Z$ }8 g modelActions.createActionTo$message # D# a) f- P$ N2 N7 [3 Z' T
(heat, new Selector (heat.getClass (), "updateLattice", false));
' c7 U% [9 }) \7 h } catch (Exception e) {
7 A4 ]! {5 }8 y% E& D3 T System.err.println("Exception updateLattice: " + e.getMessage ());
* p8 \/ S! E9 F- b9 w; ^& o- C1 t }# X" {. _" F, m0 I) T
# M6 L$ c7 O1 `) D' x& E4 E0 s! J
// Then we create a schedule that executes the" h Q* T! @2 c$ [( w
// modelActions. modelActions is an ActionGroup, by itself it
% ]9 h: _! @' e+ h // has no notion of time. In order to have it executed in, Q" D. O, e4 v, N4 n
// time, we create a Schedule that says to use the( R; e7 A& Y1 o ]
// modelActions ActionGroup at particular times. This
3 j3 J) K1 v/ z# ?- I& U# P // schedule has a repeat interval of 1, it will loop every
/ u- \# l0 n9 o+ ]* ~ // time step. The action is executed at time 0 relative to
6 ~8 L! `/ ~+ D# |8 c // the beginning of the loop.
! c) @6 ^. _+ q" P3 `$ i0 W) I$ i+ n+ u5 A7 \% j
// This is a simple schedule, with only one action that is3 b% V0 T6 ~3 q
// just repeated every time. See jmousetrap for more- o+ t8 a: i: v/ m
// complicated schedules.
9 m9 Q8 @+ ^( O. Q5 T j8 b" J ! M. ^* A! k5 D$ \5 t9 _! R- w
modelSchedule = new ScheduleImpl (getZone (), 1); t) C& t/ Y1 i
modelSchedule.at$createAction (0, modelActions);' o5 {7 U3 h2 i2 H7 \6 T* c) c. T
& h6 P! F& Q6 F5 \. z1 U# N return this;3 Z% ~6 _$ M; ~) x) h
} |