HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
; O/ B/ h* g4 ]9 `& u9 o0 M, y* H) T$ B- n6 f
public Object buildActions () {
/ G) F7 a ]% T+ C1 m) e super.buildActions();
' a8 q/ I* K- {) a5 ~1 O ' a- e9 u r h
// Create the list of simulation actions. We put these in
- j! {8 D8 H1 R* E // an action group, because we want these actions to be
+ ?: F* E5 k9 R // executed in a specific order, but these steps should0 F' e* ]: q% O; Q
// take no (simulated) time. The M(foo) means "The message) o) i( r& p3 a& T
// called <foo>". You can send a message To a particular m" J/ V0 F" L4 h9 `* D8 v
// object, or ForEach object in a collection.# q# z$ D" d- y4 O4 f5 x: q5 V' A
0 L X; x. s- w! h
// Note we update the heatspace in two phases: first run1 s7 }# M' D) w
// diffusion, then run "updateWorld" to actually enact the
, A/ l T2 _" \' }6 c6 q" O // changes the heatbugs have made. The ordering here is
. i3 P& X' |- l0 }1 }# `$ Y* \ // significant!
( M% ]; I, z& f5 p/ C 5 k" f c4 F# E, K2 Q' j
// Note also, that with the additional* f% f1 R c0 R( ^8 ~
// `randomizeHeatbugUpdateOrder' Boolean flag we can
9 [& V- k3 Q0 j3 R // randomize the order in which the bugs actually run
6 M; j' g8 a0 C6 ] // their step rule. This has the effect of removing any
# r; w4 {; ?& o/ C3 n // systematic bias in the iteration throught the heatbug% F$ T0 [; [; C
// list from timestep to timestep
! J- R# u# V/ {
7 y# |- w5 C0 k: G; p+ q" h // By default, all `createActionForEach' modelActions have
1 x4 _* d, N1 T# U; r4 s // a default order of `Sequential', which means that the
2 [/ z3 n! J1 f" Z; m! p$ ~- a8 C // order of iteration through the `heatbugList' will be( I P! i! a4 ~
// identical (assuming the list order is not changed
' i5 A/ X- `* ?) y% Q // indirectly by some other process).# @! W6 i K5 T5 Q# _. z- [
; T# e$ k, ]* g6 J, |+ [ modelActions = new ActionGroupImpl (getZone ());
- F& S& U" h7 p! G4 E F$ c0 f7 n% x X; S) j( B
try {
) P0 c. h0 V- e3 g% Y$ x modelActions.createActionTo$message* D2 A" h4 C- L
(heat, new Selector (heat.getClass (), "stepRule", false));
2 M! l: o1 _9 m1 Z } catch (Exception e) {
4 O* y( p( Q5 N% ^- c! P System.err.println ("Exception stepRule: " + e.getMessage ());
2 ?+ b7 K( @# { }, h2 P. U4 _$ L; R/ Y- t, x6 S) A
( \# e$ n/ F$ _1 G4 q' E try {$ A O, ~" E. V" z5 q3 g3 _
Heatbug proto = (Heatbug) heatbugList.get (0);) k0 Q9 m" G/ O$ h* ?% V; P2 ~
Selector sel =
% U9 `! ]& f: h" _2 n! D( h9 ~! n new Selector (proto.getClass (), "heatbugStep", false);
8 m+ V# m) @& O. } actionForEach =4 v o' |4 Q1 W4 Z5 H
modelActions.createFActionForEachHomogeneous$call' a8 r; W- e" O" s. s. o
(heatbugList,
9 {2 U) }; y; \ new FCallImpl (this, proto, sel,
F9 p& K& L* h new FArgumentsImpl (this, sel)));
( J0 X* G, B/ r# C z2 N } catch (Exception e) {9 f7 Y$ `5 m) \5 k
e.printStackTrace (System.err);/ f! u/ |% ]7 F0 \ B/ Q4 Y+ s
}
9 c) ?( P: |/ R) @' y
! y/ ?( {: U* M! f1 ? syncUpdateOrder ();
2 w3 O# ?+ L" y2 f# R
6 Q9 Z1 n8 ^8 W/ {# s6 `5 k5 |! [ try {
) t5 v- r5 [* X$ i# l1 L. i modelActions.createActionTo$message 6 x; r8 V0 y6 C% E- T; w1 [
(heat, new Selector (heat.getClass (), "updateLattice", false));# k: g! ], _$ A f
} catch (Exception e) {( k$ U, j8 \: Q8 j8 O3 u
System.err.println("Exception updateLattice: " + e.getMessage ());
. t$ ?) f5 n; Q; H; U, j }
' |3 m: p# u* y) l * t1 z: w. C+ S7 W6 r
// Then we create a schedule that executes the
# G2 S; \3 {7 \4 C& w // modelActions. modelActions is an ActionGroup, by itself it/ j6 ^! d8 n1 g4 X% H5 K
// has no notion of time. In order to have it executed in1 |9 q: n- V2 Y1 E2 e
// time, we create a Schedule that says to use the( W( P* M7 }& {# D. X2 {! r0 n
// modelActions ActionGroup at particular times. This
& ]# Q# q; E3 U2 T8 ]6 _" S; p4 z // schedule has a repeat interval of 1, it will loop every# Q# T+ G( t2 ]& z. R; S
// time step. The action is executed at time 0 relative to( R+ n$ v3 W) p9 T
// the beginning of the loop.
. P- I! d9 K' q4 F; ], z( w( N0 @5 x# A& g
// This is a simple schedule, with only one action that is/ z* Y' V( t1 Z6 ?, ^9 J$ R0 O
// just repeated every time. See jmousetrap for more
0 a% R. P4 s; ?& E // complicated schedules." B% E$ ]! ~9 ~5 j& g& M
9 ^) T3 O& K% S* V
modelSchedule = new ScheduleImpl (getZone (), 1);6 a; l# }. j9 }5 \
modelSchedule.at$createAction (0, modelActions);
: ^0 J* z4 W6 T
' G$ N. G3 S" Y% L" ~0 V return this;
5 e+ a4 f/ n# K+ H3 r } |