HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:4 b4 F( F$ w, [8 h0 ]! Q' ^, x5 P7 ?
4 s" d; l9 O$ E/ J6 R. B public Object buildActions () {
5 m1 @" Z+ n3 t8 N super.buildActions();
# v& M3 ^5 u% H) H: S
: N2 U. ^8 @; G. f // Create the list of simulation actions. We put these in
5 O7 }" V3 Z6 f4 m. ^& L* V- P // an action group, because we want these actions to be7 x7 N" N- ]1 s1 H
// executed in a specific order, but these steps should
# E- z I/ W' l // take no (simulated) time. The M(foo) means "The message
( `/ U5 F1 M* F6 F // called <foo>". You can send a message To a particular
. \( J: z s0 q. o2 B // object, or ForEach object in a collection.
) q0 G( D1 \' m' n& |1 g" {2 U ! O5 P/ R" E* `, `$ `7 a1 \6 z8 E
// Note we update the heatspace in two phases: first run
) Y2 M" K" E4 {& d // diffusion, then run "updateWorld" to actually enact the
% u$ q3 R6 y1 D // changes the heatbugs have made. The ordering here is) A( F% I( d) I6 J* d- p
// significant!5 R3 V! s( F3 F, D8 v0 o
/ B0 H, R& {! d# ^
// Note also, that with the additional; i& @7 Q* W# }4 v
// `randomizeHeatbugUpdateOrder' Boolean flag we can$ r$ [8 h' b4 O% }! k
// randomize the order in which the bugs actually run5 \: W, x1 U% ] ^) F B
// their step rule. This has the effect of removing any7 [6 t* Y2 l7 E i2 u! o3 n% F
// systematic bias in the iteration throught the heatbug
; H+ L. T% x& V // list from timestep to timestep
6 H: i2 b$ w8 X) @; d3 k
! ^0 g% Z7 T8 v2 @3 ~* @ // By default, all `createActionForEach' modelActions have
4 l; ] t; ?4 r- c& w // a default order of `Sequential', which means that the9 d9 h' d1 k% p
// order of iteration through the `heatbugList' will be% I' [6 B( D. ]! N8 i) Q7 ?( ?$ b8 f
// identical (assuming the list order is not changed3 c, {; P$ I$ V. r
// indirectly by some other process).& r/ f6 K% C5 k$ }% M
6 K1 A" `; `8 H) { modelActions = new ActionGroupImpl (getZone ());
! T) w8 T- a3 [# a/ _: B2 S) O5 `2 k" U' H7 L
try {
/ k4 P' @8 M9 Y modelActions.createActionTo$message4 o: u! v# m0 f4 q- x" a
(heat, new Selector (heat.getClass (), "stepRule", false));) T$ S4 A- |$ m: X
} catch (Exception e) {2 k/ p5 F9 O- v+ {; Z* J! D
System.err.println ("Exception stepRule: " + e.getMessage ());+ l4 C& t/ J3 F
}" a; V m Z1 U4 h1 U2 V$ _2 Z
2 m, G/ O+ I9 \5 }+ Z3 B: e
try {
. Z* c* h) Q) ?$ S" F Heatbug proto = (Heatbug) heatbugList.get (0);
X9 j6 } m2 N5 U- [4 g) Z Selector sel = & e) p* `- k6 F5 {% b: w
new Selector (proto.getClass (), "heatbugStep", false);7 n: a/ N9 B( z- g4 J
actionForEach =
6 K) F: m1 C+ x1 Q: y modelActions.createFActionForEachHomogeneous$call6 |' X. i4 j5 X/ p- e; ]. w. a1 E
(heatbugList,
3 q* X a& `5 H( f; c Q6 P/ G new FCallImpl (this, proto, sel,
# G. t& {) f& m4 {/ G" Z new FArgumentsImpl (this, sel)));
9 F" w( y8 B, r9 M. Q, U } catch (Exception e) {
+ J! }* v8 ?+ l; m, f! B# ?/ S8 u3 v e.printStackTrace (System.err);5 I3 y) i/ K- I! v
}7 I; S: _6 d- j3 e3 m
# q d8 o* p+ {; a8 S- B! t$ n2 U( ? syncUpdateOrder ();
& L4 P, _/ P) j1 o' M1 x
, M$ ^8 E6 b; S% k try {
" R, H- y. n. u; u! f modelActions.createActionTo$message
N) m' g8 `3 c/ v. y (heat, new Selector (heat.getClass (), "updateLattice", false));
; v" }9 v1 |" t } catch (Exception e) {
: z& I9 f+ _( P" D6 X' G9 h System.err.println("Exception updateLattice: " + e.getMessage ());
& R Z2 t5 P' z! X5 a5 F4 ^: h }7 t( L6 C( H6 } o3 y
: R# m3 D; R4 b1 J+ O& Q+ q( X/ ^5 L, ` // Then we create a schedule that executes the
4 P% `* u5 E% R" L, B2 ]+ z // modelActions. modelActions is an ActionGroup, by itself it
D8 n6 m6 r S5 ?! G( r // has no notion of time. In order to have it executed in
. C' P6 c8 l, G* s5 D // time, we create a Schedule that says to use the) s: G7 I, O/ @9 ?3 S8 Z% j
// modelActions ActionGroup at particular times. This) f9 r, G/ ]0 N) e
// schedule has a repeat interval of 1, it will loop every
7 {7 A2 D$ B% `2 {' r" O( |& D // time step. The action is executed at time 0 relative to, [( I% R! |# q' q% I! ]
// the beginning of the loop.
! \% E' S' a) H9 C8 a0 I T( B, S; ] b' { x) k
// This is a simple schedule, with only one action that is7 [; X( A6 G4 v7 C$ m. T6 ^/ o) H
// just repeated every time. See jmousetrap for more
( g: Y. C) M% k' T1 [. O/ Z; r1 y // complicated schedules.
3 _1 x/ S/ Z3 a; b7 p- \7 ^( ]
+ G; @% L5 ]. M3 y5 |# F3 X2 Q0 O! ` modelSchedule = new ScheduleImpl (getZone (), 1);8 E9 I# f$ f* }
modelSchedule.at$createAction (0, modelActions);
0 h+ t; e& t% w( L8 S) ]6 `1 s 9 ~3 J6 E0 |+ r/ Y& C, P$ K# m
return this;" l+ o- W6 G3 k1 e
} |