HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
6 G5 M3 z( g& T# }& Z4 [; T5 u7 Q: C5 x% g) q) _, g
public Object buildActions () {2 S( W1 X0 Q8 b1 f! M! }; e
super.buildActions();3 S+ n0 d4 b8 u# c
( r9 ]$ W0 _/ ~: c
// Create the list of simulation actions. We put these in
7 m+ C7 F: d* T- Q. r // an action group, because we want these actions to be# i2 P. D& I7 |# H% W3 k8 o& _
// executed in a specific order, but these steps should
- X1 r0 P" m: L5 W6 M // take no (simulated) time. The M(foo) means "The message6 b! n% z- ~. X" Z% L
// called <foo>". You can send a message To a particular
" V7 m2 R; a- E8 R* Y // object, or ForEach object in a collection.7 s9 v& [: A3 Q& L
* w# E1 Y. s; f! G
// Note we update the heatspace in two phases: first run
, H/ R! b2 j" c& ` // diffusion, then run "updateWorld" to actually enact the- C: K- X [7 O; c1 i( t8 ?, u9 D
// changes the heatbugs have made. The ordering here is
$ N+ a ^* o" U+ A5 q" } // significant!0 S$ M- k% u E% d/ J; e3 f+ N
4 l+ n% ^. ?; p# a4 e) x // Note also, that with the additional$ o8 K. b& b1 y4 `
// `randomizeHeatbugUpdateOrder' Boolean flag we can4 v; r$ m* L7 p
// randomize the order in which the bugs actually run
2 c4 _$ x" m$ A+ z. d( w' n' t- E // their step rule. This has the effect of removing any
! `% Q3 {+ E. a; Y7 H% d2 k // systematic bias in the iteration throught the heatbug3 d8 E, u8 _4 H
// list from timestep to timestep6 z( H, P3 A: o7 h L8 k
' @6 d2 W) f/ A8 \6 t* I# a // By default, all `createActionForEach' modelActions have
5 ?* g, N4 h+ C: f/ d // a default order of `Sequential', which means that the
- }5 b. Q# N h // order of iteration through the `heatbugList' will be
8 ~0 `2 v9 W: l- y& k- [9 f" Z // identical (assuming the list order is not changed7 o4 X1 E( o& }6 e: f' ^4 j# Q1 t8 ^
// indirectly by some other process).7 ^' {3 ?7 T4 d3 A' y9 k; Z$ v' h
+ C3 L/ Z" R: A modelActions = new ActionGroupImpl (getZone ());6 K+ O# h# V/ f5 j
" D; ^) B3 N' [) F/ ^6 T! T9 j$ ? try {
3 D! }; q) k0 l3 a; s4 }: G modelActions.createActionTo$message8 r. n. a$ T; p6 ?: {& X' z+ O
(heat, new Selector (heat.getClass (), "stepRule", false));2 a* R4 t2 r- v- o
} catch (Exception e) {; W% \( X3 V9 h2 |% t# C5 _
System.err.println ("Exception stepRule: " + e.getMessage ());7 R9 G, X* s O! C1 \
}1 v1 W0 _ I3 D) d. j: h- @
' h% Z2 ~( n: x5 m; p- _" [ try {) H- a) c0 \5 w9 b: m7 n9 S
Heatbug proto = (Heatbug) heatbugList.get (0);
0 s; @$ M; j2 B9 F9 l+ T3 V Selector sel = ) f& ~3 P" r7 [8 {' G0 w- c
new Selector (proto.getClass (), "heatbugStep", false);0 D x: ]6 b2 {1 b. _- X4 X# x
actionForEach =1 u/ u4 D( C. f4 g0 Q
modelActions.createFActionForEachHomogeneous$call
! v. X4 Y3 X9 ^" M (heatbugList,
! V9 E$ {$ O3 `6 M# y; K new FCallImpl (this, proto, sel,* o: ]- l$ P9 n6 O+ x! ]8 a
new FArgumentsImpl (this, sel)));
0 W1 Z7 t8 ~) Y! l; ~ } catch (Exception e) {
. |' e ~% g: j2 D e.printStackTrace (System.err);: Z$ T6 w, r: Q/ Z' O
}; }& L$ u9 p3 B3 p( o6 M. S4 c
: {, R; S. B2 z; K syncUpdateOrder ();
. k2 u. @( b& H, o
" k" \8 \ U, s1 a' j& \ try {) P" V2 u' I% w2 {9 T! Z
modelActions.createActionTo$message 2 z( o' s2 G& l5 T6 C0 F
(heat, new Selector (heat.getClass (), "updateLattice", false));. ~' q+ c9 q% m& W
} catch (Exception e) {, C* e7 t) Q P+ Y- Z) A) W
System.err.println("Exception updateLattice: " + e.getMessage ());
" t! u) X5 K+ ^. c6 P }% ?$ F; h5 s' h) S% I" }% c) P7 z) I3 e
- y- Y% G' W2 @7 i // Then we create a schedule that executes the
5 t) V: c8 p' u4 N: z // modelActions. modelActions is an ActionGroup, by itself it1 j- j* A3 j9 L) x! K
// has no notion of time. In order to have it executed in, j. W/ u& D; }
// time, we create a Schedule that says to use the) `5 T+ n! P# |% G) ^9 X- d
// modelActions ActionGroup at particular times. This e2 f- u4 u( W
// schedule has a repeat interval of 1, it will loop every
; ?! a; p# H& Y5 \2 X# g& C, f) C // time step. The action is executed at time 0 relative to
7 n4 l) G' T8 O `- [* K# C // the beginning of the loop./ M3 C$ u& N+ O v* f* P
& U0 _& D9 ^% @& l+ n- Y) s
// This is a simple schedule, with only one action that is
0 {5 o2 n+ `8 P, [ // just repeated every time. See jmousetrap for more! F1 e& Z3 D. F
// complicated schedules.* h8 C4 \& q) }+ B" I
3 I# m' C9 \. ?1 b
modelSchedule = new ScheduleImpl (getZone (), 1);
8 f2 @6 k' Y: v) v/ g( \ modelSchedule.at$createAction (0, modelActions);
8 a: V0 M9 l( _8 V# _) ] & d" h+ k7 \/ q+ f K" s' M
return this;
; Y4 ?' A" b: q0 O } |