HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
) N! q" ?3 L4 r ]0 K- J1 |. W: e r O) D7 D/ _" k* n
public Object buildActions () {4 C' i. q# h) d: f6 u
super.buildActions();
$ |9 @! t1 U7 e+ _5 w3 D 0 F0 o$ O) d$ ~. i( E- m
// Create the list of simulation actions. We put these in
* l8 |# T+ {5 Y; d( t // an action group, because we want these actions to be( w& _( f( A7 H4 {
// executed in a specific order, but these steps should8 v2 ?2 ]! T: Y& K
// take no (simulated) time. The M(foo) means "The message
+ G) L1 ^6 Q% V# ^4 I* I // called <foo>". You can send a message To a particular
& ], u4 f/ }/ o, ? // object, or ForEach object in a collection.% A( e3 }/ r0 g/ X3 e1 B4 W
9 [ [5 o" ?$ j. P
// Note we update the heatspace in two phases: first run! O5 y$ B+ t7 @- Q0 i
// diffusion, then run "updateWorld" to actually enact the
3 C* R! \( r6 x/ A5 @4 v // changes the heatbugs have made. The ordering here is
, `- d2 j+ g2 k" W+ [- { // significant!3 f6 I1 |2 h+ N3 L+ }
* P6 ]" u; Z' \% k+ a+ i // Note also, that with the additional
1 y1 b* I: U2 s% O9 v i8 e // `randomizeHeatbugUpdateOrder' Boolean flag we can
* j9 c( S6 w. c1 i" n2 V( J // randomize the order in which the bugs actually run0 v! E/ Z8 H: L4 t# K! x& C9 I
// their step rule. This has the effect of removing any
$ A7 z& e# N- L" e, R- k& g // systematic bias in the iteration throught the heatbug
% Y$ @3 S7 _' k, Y // list from timestep to timestep7 \0 j# H# Y" d; J2 P2 \8 @8 r
6 o8 C- N3 H2 b) x7 r" ^. ^# Q3 U
// By default, all `createActionForEach' modelActions have
4 O1 y% e5 v3 f# p // a default order of `Sequential', which means that the' S7 |# t v2 U9 u2 g1 V6 s9 X6 ?2 v
// order of iteration through the `heatbugList' will be
4 p7 |1 w) p$ B& s // identical (assuming the list order is not changed! v; _2 k# T0 C) R% J
// indirectly by some other process).; C: {, S5 d$ G5 a: P
1 a' b2 N( m* q: j3 W& s$ c modelActions = new ActionGroupImpl (getZone ());
6 t2 s8 J0 ~: a1 ?% j* |2 Q7 E
2 l$ Y' d) `6 A6 \, N try {* M/ m7 h5 r: u- l2 g
modelActions.createActionTo$message
' {) [! n. p% i1 }/ V9 W (heat, new Selector (heat.getClass (), "stepRule", false));9 n! M5 ]' @# @4 q/ P( F$ A
} catch (Exception e) {) U, X/ H4 f, w. W! \! \) R. O) x2 N
System.err.println ("Exception stepRule: " + e.getMessage ());" c' q3 u: x% {' l
}: u, c6 a/ Z/ I) ]
3 d1 {, e" R J try {
; y, q3 U A" @$ e1 \ Heatbug proto = (Heatbug) heatbugList.get (0);9 H( k5 b+ X6 o7 D
Selector sel =
+ ~* F/ |% a5 J' h* N2 [ new Selector (proto.getClass (), "heatbugStep", false);
$ j" _. O/ p! g. [9 d! H- ~% Q actionForEach =
: @% z( u7 K3 X5 j0 U modelActions.createFActionForEachHomogeneous$call
9 ~5 r$ n" N i9 e o7 ^& Q (heatbugList,
! C$ G% Q; w; y1 O4 L F$ f new FCallImpl (this, proto, sel,% a4 l- F/ U z$ R! q9 ?& d
new FArgumentsImpl (this, sel)));
; S& R) O1 a' F% `# d* Y( R ~ } catch (Exception e) {6 H/ n8 \7 D- K' d- O
e.printStackTrace (System.err);
# W8 ]) x3 Q1 t6 J( l }+ o. W) j r8 s6 V6 s4 |
( _6 @4 O2 }* ^4 {; N6 g
syncUpdateOrder ();$ a: e7 c0 {' Q8 _, D& m! |
9 r* _" \, M4 T, `; b% ~ x; Q
try {7 x# `' u2 n3 n' M
modelActions.createActionTo$message , Y5 W8 c+ `2 j$ j F2 T* O* h
(heat, new Selector (heat.getClass (), "updateLattice", false));( a" Z; |. o; ~4 M; y' ~* d
} catch (Exception e) {7 O. E' a" ~4 d; h: y
System.err.println("Exception updateLattice: " + e.getMessage ());- s& E8 {+ P0 H6 k! R8 l# F
}2 K( m) ]' s F) M$ `0 y9 A" @
, Y0 r6 Y% Q3 F; H3 O% c& c4 B // Then we create a schedule that executes the
9 E# O$ N3 }9 }4 u // modelActions. modelActions is an ActionGroup, by itself it
- \1 X# M# a) @7 @' c // has no notion of time. In order to have it executed in
- U, x t7 B* B$ s // time, we create a Schedule that says to use the% d+ `& a! R9 q& b+ E% a
// modelActions ActionGroup at particular times. This
1 u8 ?% F6 H6 N& A" \# L: k // schedule has a repeat interval of 1, it will loop every
) E @# v7 X3 \' J+ N // time step. The action is executed at time 0 relative to
: s: V5 y5 x- Q3 G. Q$ o0 S, k4 ~ // the beginning of the loop./ C9 p3 a' V r: W, B* [+ G9 p; L$ N
1 t9 ~# O, k) c6 i5 e O
// This is a simple schedule, with only one action that is
! A5 U- n3 q B4 R* i; I5 T% w // just repeated every time. See jmousetrap for more
9 c. x Q0 ]5 A Y8 d0 M // complicated schedules.9 W* z& F0 h+ Z" j( Q
% Q: `( F# E# M4 r8 J4 ?4 W$ a- _ modelSchedule = new ScheduleImpl (getZone (), 1);
6 c/ O' U# C# S$ Q8 ~7 P% i modelSchedule.at$createAction (0, modelActions);
# l& p( F; |+ m# W; \7 O) f
- O- O5 B* t9 e% B2 k" d4 | return this;
6 H X6 R% j& d2 M* n% _ } |