HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
6 e9 e* i' O0 |8 z7 w1 [4 A* Q1 o/ y1 o1 {2 X
public Object buildActions () {
3 Z q9 G" X x. e super.buildActions();# o$ r2 w: g& A3 i( @6 z0 S6 g
$ X4 P" p& f5 o1 N8 e+ U" \4 {: [, [
// Create the list of simulation actions. We put these in V) s5 n4 \& ]& ~5 Y/ z
// an action group, because we want these actions to be
! _+ b+ }, R/ N // executed in a specific order, but these steps should k$ P* z$ y3 {# N: J( `& r1 D( C9 X
// take no (simulated) time. The M(foo) means "The message
/ H6 V6 v Y) `& B- l // called <foo>". You can send a message To a particular) i$ k' S7 @4 m2 Y
// object, or ForEach object in a collection.9 |* [) F8 b$ r% }1 o
q, Z1 D1 J# i! p" D L) _9 w // Note we update the heatspace in two phases: first run
/ g9 N# s, }' x // diffusion, then run "updateWorld" to actually enact the
" Z K: Y3 @- O, l# B4 N2 D3 _5 L" Z // changes the heatbugs have made. The ordering here is5 n& r2 l; z; I4 h" L% x
// significant!
7 e; l8 I. K- z+ p% X 1 N F. W/ C* d: r+ I6 V I: }5 [1 _
// Note also, that with the additional5 @9 _3 M$ G8 B
// `randomizeHeatbugUpdateOrder' Boolean flag we can
/ E# t7 E x! d" S# H" _$ D // randomize the order in which the bugs actually run# H( {/ @* [5 z; @: `
// their step rule. This has the effect of removing any3 v5 E% U4 _- q- a0 D, h
// systematic bias in the iteration throught the heatbug
% O$ `3 P- [0 `+ {4 T# s | // list from timestep to timestep
0 N, ~( V9 ~, ~9 n% Z O) p) c
, v/ h: m$ w/ C7 p: @7 l# o // By default, all `createActionForEach' modelActions have
/ Z S; E4 L! c7 W& V& `" e b // a default order of `Sequential', which means that the
0 R5 K3 p+ x/ U // order of iteration through the `heatbugList' will be
% G4 C1 P2 C: n. a V // identical (assuming the list order is not changed7 c/ O9 F: w* l5 _5 X! M. e. k
// indirectly by some other process).
- a+ V* o7 a, c( G % ^+ P4 i4 r" N- w5 T) _$ H+ |8 m
modelActions = new ActionGroupImpl (getZone ());
6 D! q# ^* g5 |- f8 o# s8 c }2 K
try {% c( ~" E# e/ F9 `. O
modelActions.createActionTo$message# b! A" L& P$ u# B3 Y
(heat, new Selector (heat.getClass (), "stepRule", false));3 Z3 _% d, S+ c
} catch (Exception e) {& w4 l& o1 Q6 r8 f0 }: ?6 `
System.err.println ("Exception stepRule: " + e.getMessage ());/ T9 y$ _+ ^' I/ ~& M
}- F6 N5 [7 W% j' z* ?" _
7 Q+ O7 U0 e( D* ^+ t) W try {. k+ A3 j% f' F
Heatbug proto = (Heatbug) heatbugList.get (0);
" K' H3 S$ R5 D3 ` Selector sel =
/ Q) [# [$ I8 F& [5 [ new Selector (proto.getClass (), "heatbugStep", false);, a E) v' R6 `& q% E. x
actionForEach =
g6 T' i1 G$ W, \ modelActions.createFActionForEachHomogeneous$call
+ A" g# C% k! y+ x (heatbugList,
, P) K! r! U9 |/ q1 N" ^ new FCallImpl (this, proto, sel,9 b4 q* Y/ {; J! ^ K0 r
new FArgumentsImpl (this, sel)));
2 D/ g# B% ~* J5 R% | } catch (Exception e) {
* \2 r* S$ t' V" B e.printStackTrace (System.err);
4 }# y. t! ~1 M! y! j! \ }% I8 f# u, L; u9 A) E+ s
7 k1 i S3 M" ~6 j8 F, X8 B syncUpdateOrder ();+ _/ I u1 O% Y S
* Y$ }" ?/ [" b) ^8 ] try {' b, g, z; t2 ?+ w' x) u- B
modelActions.createActionTo$message
; \. G! O( j# k0 P) T (heat, new Selector (heat.getClass (), "updateLattice", false));( ^% J, M7 n* n8 H3 X
} catch (Exception e) {7 ?9 y8 m/ g/ r
System.err.println("Exception updateLattice: " + e.getMessage ());
% \' h0 d; _8 Y# P }) P* |1 T( i% |) N; q
) P; w: f2 R, W, V4 p' J6 C // Then we create a schedule that executes the( k# T2 S2 u8 R `6 t0 ?
// modelActions. modelActions is an ActionGroup, by itself it
/ @; z( s+ G' p4 _4 z- k$ w // has no notion of time. In order to have it executed in
4 r6 A0 O) |9 ^+ ^ // time, we create a Schedule that says to use the
X, x% V) _' b8 H! ` // modelActions ActionGroup at particular times. This
: J7 X1 x9 o! h# U, f // schedule has a repeat interval of 1, it will loop every& d2 b9 z6 z: [5 V& i
// time step. The action is executed at time 0 relative to9 K% E+ a# K2 T* r
// the beginning of the loop.
! j# d4 ?$ m" O. J$ g' D+ c0 K1 x6 ?
// This is a simple schedule, with only one action that is
3 c/ C) ^2 B) F3 P // just repeated every time. See jmousetrap for more
/ p% d$ m2 M" I% q5 e2 w // complicated schedules.
! @* z! w$ I& W# K {
# c, r# J* G5 {0 @; I" a modelSchedule = new ScheduleImpl (getZone (), 1);# h1 s) ` n* c+ I! p$ ~$ m
modelSchedule.at$createAction (0, modelActions);, v5 f( K( ~, I" }5 C
, N3 X7 p' J" J- Z, H
return this;; l- B$ }4 R" F; f0 o) L& |& L
} |