HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:3 J7 f; b- }, R1 {
9 i, t7 b8 O3 m8 ^9 t public Object buildActions () {
3 h1 ]2 m' b! e: S# l super.buildActions();
4 A& B8 @* m0 @" t& D + _+ f- W- r( j# l. W: C; e
// Create the list of simulation actions. We put these in7 m' t/ O, M5 A, F
// an action group, because we want these actions to be
6 w* x* \1 C* E6 s6 T // executed in a specific order, but these steps should
/ P; p3 f. {" B8 U7 D // take no (simulated) time. The M(foo) means "The message' D: Y9 ]' _9 N7 t/ s% Y2 j+ c
// called <foo>". You can send a message To a particular, d! ?- v' C/ d: o* M- c
// object, or ForEach object in a collection.
9 P* U9 @" |; n0 o1 u
& ^- E, E$ e9 X0 K* O // Note we update the heatspace in two phases: first run
. H; `4 C2 P8 D2 [6 e // diffusion, then run "updateWorld" to actually enact the
; D, F. N( N; l( M, O8 j5 G ]/ Z // changes the heatbugs have made. The ordering here is
& ~& I# ^( W3 Y // significant!
& j3 N5 \8 D$ R# w+ Z! @ u
( }* E" z+ q4 M; r; G4 H5 A // Note also, that with the additional+ E5 M/ ?5 e& S ^
// `randomizeHeatbugUpdateOrder' Boolean flag we can
, c0 g+ w- g _$ H# p( I2 a // randomize the order in which the bugs actually run
0 I' q! [% E0 ?# Z8 a: N8 M2 w7 }5 m // their step rule. This has the effect of removing any# b: G( b6 n! X7 D `7 Y( w
// systematic bias in the iteration throught the heatbug. t8 R" J3 H; R/ U) f* K
// list from timestep to timestep \5 r( j- F4 q
' J* o: g( z# G, H
// By default, all `createActionForEach' modelActions have
/ ~) A p; A7 Z- z6 O$ C4 X // a default order of `Sequential', which means that the
8 U7 b3 F& y3 Q5 G // order of iteration through the `heatbugList' will be
+ M. ?" m" t1 b% i! S/ Z // identical (assuming the list order is not changed% P5 ?; {, b- k4 m6 L
// indirectly by some other process).
# J' R: h5 h0 R) D % N$ x' [* p0 j6 x, \1 N% D
modelActions = new ActionGroupImpl (getZone ());9 X+ Q; d# n# |7 J" [
+ t) H2 m; j0 R8 Z5 L try {
# K4 n5 v% g4 ~: p modelActions.createActionTo$message
8 L# L$ y) o. b (heat, new Selector (heat.getClass (), "stepRule", false));
& n9 z- q/ P, M; K8 U } catch (Exception e) {
* R- o$ D# A# N/ z System.err.println ("Exception stepRule: " + e.getMessage ());) }* ]. K5 K) t' N' c9 v9 G
}* i. Q) d% h5 x
5 s# Q& ~: k5 b3 s try {' U9 [/ P, }! ?1 o# \4 s2 w6 d
Heatbug proto = (Heatbug) heatbugList.get (0);0 \: H+ _8 [1 I Z4 P0 }1 H4 d
Selector sel =
3 \1 M; ?2 r% T6 Z5 L" P new Selector (proto.getClass (), "heatbugStep", false);) \' D( d1 `1 o) ]
actionForEach =/ B1 G0 Z; P' i7 b9 Z; x
modelActions.createFActionForEachHomogeneous$call9 u1 K/ k) d! m+ x, i: ^/ \+ }
(heatbugList,/ B% l: l! h0 J( P' _
new FCallImpl (this, proto, sel,
' B7 l9 c% n0 S9 P- p new FArgumentsImpl (this, sel)));/ R, e4 T; i/ g$ L$ v4 F
} catch (Exception e) {
1 I" ~. [- L$ v9 F( u+ {- x e.printStackTrace (System.err);8 s6 X7 \6 |% C3 |. A: ^) E6 g
}
; |( k9 A) c5 h' [, b, g
) @# h/ Z* w4 z3 N" @# o- V! b syncUpdateOrder ();. A7 O8 U5 v3 I5 V- t2 u# V
, h( f2 g4 i# z9 \# E
try {$ h1 s) G3 H( n! R* @& H- R5 K x* G
modelActions.createActionTo$message
- g6 [' Z6 j7 P% L5 @8 ]# w (heat, new Selector (heat.getClass (), "updateLattice", false));# O, |! M( W5 M! k" U6 c
} catch (Exception e) {+ P+ A" S V7 v$ N t, o
System.err.println("Exception updateLattice: " + e.getMessage ());* j7 d2 F$ B! u j
}9 J2 ^& }2 Y# B) O
4 ?6 }7 I# S. w( l' Y3 Z // Then we create a schedule that executes the- S' N. @8 M7 p8 z, t/ \) f! L( ?1 {8 S
// modelActions. modelActions is an ActionGroup, by itself it; j) E! v) j4 F$ e* u4 J
// has no notion of time. In order to have it executed in- Z/ p3 Z1 o! v
// time, we create a Schedule that says to use the5 H: q9 [$ v4 g, G- b7 n* }
// modelActions ActionGroup at particular times. This' t4 e; ~% W+ X+ Z/ E+ n$ p
// schedule has a repeat interval of 1, it will loop every
. m! r- F5 q7 ~4 Y6 u6 E' W5 O+ @ // time step. The action is executed at time 0 relative to
5 M$ E* M: N h: G4 V0 F8 q // the beginning of the loop.! U5 Q* u0 P3 m3 N1 p
+ ?5 | F; f1 H$ r, X( g
// This is a simple schedule, with only one action that is! N" L( Q; R9 ?& S' J
// just repeated every time. See jmousetrap for more
; c9 ~0 s' V9 f1 C& N& I6 r0 [ // complicated schedules.
4 C- P8 k; k* v
- I0 b' H& V2 h) X. ^. J modelSchedule = new ScheduleImpl (getZone (), 1);, W2 n0 i' E8 ? }$ N$ D
modelSchedule.at$createAction (0, modelActions);
6 X( }! A# W) w1 q + L" N. t: H8 W$ t
return this;; L3 k! d3 N+ f
} |