HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
- B4 R! |, |/ S; r! F1 p8 g1 \& R6 w+ ~) F
public Object buildActions () {/ f$ ~2 N: l* r: L% K
super.buildActions();, r2 U/ I' i% w4 S7 z/ I' Y
' M$ P* T# E$ w4 v
// Create the list of simulation actions. We put these in
! H8 d6 s! w6 s# F // an action group, because we want these actions to be
$ x0 d. v1 ~( @: \; k2 j // executed in a specific order, but these steps should q4 w6 F% v* ~, c5 A
// take no (simulated) time. The M(foo) means "The message
7 p$ P6 d0 _8 q/ ?4 [. V // called <foo>". You can send a message To a particular
/ l8 A* m! x i ^3 L, s // object, or ForEach object in a collection.
: ~1 S* d o& A' e
8 F# U+ w; b* p" r1 r; Q2 R // Note we update the heatspace in two phases: first run
9 F- v( i$ n" H4 W7 Z3 ~& H& Y2 ? // diffusion, then run "updateWorld" to actually enact the4 j2 j+ F8 T8 u2 [+ n7 U. ?
// changes the heatbugs have made. The ordering here is
7 w* i, F$ Z3 I% `2 W o // significant!
. L3 b+ q) C- t9 u( l 3 w* a c" H) D# `2 ?# ^4 r: ~. a
// Note also, that with the additional; @8 q @' h) v) v0 D, u
// `randomizeHeatbugUpdateOrder' Boolean flag we can
4 K, k" g( P$ c0 {$ A& H7 H9 c // randomize the order in which the bugs actually run% g2 x$ ?* [1 Z* r9 V
// their step rule. This has the effect of removing any
, N- H1 M5 G6 j% G5 N o. ~+ I // systematic bias in the iteration throught the heatbug9 ]# E# ?' b3 ~1 ?* h3 w
// list from timestep to timestep% J* J. m, a& t# g% F
2 P/ G, }& Q4 b7 c // By default, all `createActionForEach' modelActions have J4 K4 A* C. ?8 c
// a default order of `Sequential', which means that the
* Z' Z/ V4 m/ D( J // order of iteration through the `heatbugList' will be
- o( @) C( {$ |0 U3 e* a9 d // identical (assuming the list order is not changed" _) I% M: O" r4 N6 F
// indirectly by some other process).
7 b! ?( b; ~: E
5 a6 i4 x& i+ y7 E4 h modelActions = new ActionGroupImpl (getZone ());1 }+ X. v$ c# u) y% P$ B& q1 S5 o+ _
7 _# |$ E* }$ n% m
try {
" b- B& y( Q L0 |/ L modelActions.createActionTo$message
6 o9 a3 w" G& K) I5 J6 G (heat, new Selector (heat.getClass (), "stepRule", false));
' Z; n+ ]& @/ H( k7 q6 i } catch (Exception e) {
& [2 m8 a5 {; h: [* a! |0 [ d$ I System.err.println ("Exception stepRule: " + e.getMessage ());
: q0 X. b9 z/ c }
9 Y) Q, f' |2 m6 ?8 H
" s6 g$ E% o- }% u/ A try {, V1 g3 P" s/ e8 a/ V# K
Heatbug proto = (Heatbug) heatbugList.get (0);
! W; R" F' _* e9 }2 ` Selector sel =
) w/ V& G$ x f9 M, g new Selector (proto.getClass (), "heatbugStep", false);
& v0 X* A# F5 [ H! Q actionForEach =7 |& F' |3 T5 V( u6 u
modelActions.createFActionForEachHomogeneous$call
6 S# k! M2 Z# q3 m5 u (heatbugList,
" [6 V& ?- m6 I8 K9 O8 @* l$ s( I9 G new FCallImpl (this, proto, sel,
6 n( j* t- E* K" Q5 ~" u5 j _4 e new FArgumentsImpl (this, sel)));" K4 Y$ i& _7 j
} catch (Exception e) {
3 \7 k$ M P; h( V; E6 n9 z5 q; [ e.printStackTrace (System.err);
- g9 K$ Y9 `9 s x- Z6 ?& ^ }
0 @) o' i8 t+ a- D, S+ l' V 5 a2 k! x/ ?8 \! o+ E5 w" a# h, D
syncUpdateOrder ();2 v9 [2 o* |1 n5 s7 N( U- l# s
7 s" s. K. x( E7 {- Q" n
try {
5 f$ K7 @( Y: q' c6 K( ~ modelActions.createActionTo$message ! R. B _* z5 j/ W
(heat, new Selector (heat.getClass (), "updateLattice", false));
+ Y3 v T" T, N5 F } catch (Exception e) {1 d6 t9 ~) K$ G
System.err.println("Exception updateLattice: " + e.getMessage ());- t, w9 L5 u- g- g; e. j: M+ j' J7 h
}- x" z0 }& Y6 f* Q- ~1 q+ m& C. _
! x2 v, C+ M; ^! z: t' o
// Then we create a schedule that executes the
# w) V7 a0 y, u, Y8 q2 F( J. j // modelActions. modelActions is an ActionGroup, by itself it: k E3 S1 f: ?/ }
// has no notion of time. In order to have it executed in
1 {) x% l7 P& V/ V! {& T5 A // time, we create a Schedule that says to use the V" ~6 b2 U3 R% B$ J. a
// modelActions ActionGroup at particular times. This
' M+ W5 d. f5 f. u } // schedule has a repeat interval of 1, it will loop every7 H! ?" ?1 `5 C2 ~2 p
// time step. The action is executed at time 0 relative to
& S- s7 U: h* Y! `! L# y: R: X. O // the beginning of the loop.
, P. h' h: o$ e5 R) A! J4 h: b% O( |) y5 O! a9 F1 y" ?
// This is a simple schedule, with only one action that is
/ w: m( R4 v- I3 s7 T/ } // just repeated every time. See jmousetrap for more
$ x( p, w. ~( Y& u6 l // complicated schedules.
+ D" ^( p2 y! U3 |4 p& k. J
$ d# V% U; b, Y7 v modelSchedule = new ScheduleImpl (getZone (), 1);
* B1 p; W% S {- D% u modelSchedule.at$createAction (0, modelActions);
3 Y9 j( C% _3 ?7 _! D- {
" L5 [! v; h2 h2 \; ]6 Z return this;
0 E4 u8 S; `, y+ y, I' e, x } |