HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
! d/ x$ I( }9 ` h) Y
% ^ h3 L$ R- \5 r public Object buildActions () {& N* g1 X8 _) V5 S" \7 d* Y
super.buildActions();( }8 c; {; ^" w9 D2 {
, o' I6 F, L1 b. x7 m/ s // Create the list of simulation actions. We put these in
2 U* X6 N/ e3 N! s // an action group, because we want these actions to be
M! L! o" e o! a3 d% Z7 [, o( T // executed in a specific order, but these steps should
5 J$ k! G9 n. v. k6 \6 j. L // take no (simulated) time. The M(foo) means "The message' ~ x& l2 U' R6 ^ G
// called <foo>". You can send a message To a particular
5 |) g5 K6 ]$ _9 S // object, or ForEach object in a collection. T9 d' e5 G9 L. X+ N4 C
V; R0 j# C4 f1 x9 n3 ?/ `. o1 C$ e // Note we update the heatspace in two phases: first run0 n( r# S& e& d; c
// diffusion, then run "updateWorld" to actually enact the
7 U) W" |5 H2 u; c' G // changes the heatbugs have made. The ordering here is) e$ H$ U+ N! @
// significant!
& ?9 H6 m$ X) B; q+ R
( H8 v E' e, _$ c0 ~' `- z // Note also, that with the additional
3 O2 p3 r% L5 }+ E // `randomizeHeatbugUpdateOrder' Boolean flag we can" O: |/ ~/ [# a7 I
// randomize the order in which the bugs actually run& ]' k& Y: ]; p. ~2 N+ ?# l' y
// their step rule. This has the effect of removing any
1 G7 ]' m& U, F1 ]! z% a& Q // systematic bias in the iteration throught the heatbug9 v y( v/ }& F# z1 ?
// list from timestep to timestep1 j& W; x9 Z* V3 h: o4 I
5 v$ q# u5 [+ H/ g2 C! x" J
// By default, all `createActionForEach' modelActions have
, W, [' b$ A3 i1 M6 G* z0 O // a default order of `Sequential', which means that the
& z. y0 F4 r% J // order of iteration through the `heatbugList' will be. ?% E- }7 m% K4 o) s! Y6 A% b
// identical (assuming the list order is not changed
( U2 R) y8 T5 g0 o // indirectly by some other process).
9 G- N/ V- H4 v1 l
, r8 I: L2 j% @$ d- Y modelActions = new ActionGroupImpl (getZone ());
& s) [& k0 Z8 }7 O
/ F/ a6 [( @ T try {
$ O! }% x+ a/ r$ K modelActions.createActionTo$message+ S( l. O! M/ \+ x
(heat, new Selector (heat.getClass (), "stepRule", false));
: ^) K( w) ^ J0 ]$ C R } catch (Exception e) {
, M, f$ R, Z) x$ X7 u System.err.println ("Exception stepRule: " + e.getMessage ());2 T, O. e6 A" m! c
}
5 `/ f3 B5 N3 W6 D( m$ J/ l. C
* f2 W2 K2 X0 G$ S try {
2 y) v0 {! v, S8 _9 }8 s Heatbug proto = (Heatbug) heatbugList.get (0);0 n U" d2 A1 P2 n; z
Selector sel = 9 J5 _% R! e' i& ?9 |/ s
new Selector (proto.getClass (), "heatbugStep", false);1 B1 p/ |- V, ^8 ]* S* J( a
actionForEach =1 Q+ g" z# {. z/ N5 v* F
modelActions.createFActionForEachHomogeneous$call$ c6 i. {* V% C9 z
(heatbugList,
6 D! b+ ?! V1 H; G+ q new FCallImpl (this, proto, sel,7 I" B0 V C. Q2 ^2 n
new FArgumentsImpl (this, sel)));
; R2 e ?- h0 u, x ^3 e! z } catch (Exception e) {4 @$ g$ H0 K" Q; X( |! }! m
e.printStackTrace (System.err);) j( o( o5 M9 i; @6 `" D
}3 f: w {5 P# A; S* K
+ j. f( o' ^- `. M
syncUpdateOrder ();
0 |) v& R7 g/ l7 N2 W8 u
W/ H( M. J1 o! @7 y try {) W8 k, H; R0 A6 r5 |9 V
modelActions.createActionTo$message
3 l' A; W: Z" q- \ (heat, new Selector (heat.getClass (), "updateLattice", false));
|) P/ f# _4 I' Z H) g1 N+ d, P } catch (Exception e) {$ q; {. t" B) s. l3 z0 i8 h, ]
System.err.println("Exception updateLattice: " + e.getMessage ());
0 c* Y, e& v. X0 ?- }/ q }
7 B* v' @& C% l# R
/ q& m+ Z* u0 a2 v // Then we create a schedule that executes the+ J0 p; Z. z2 R7 O
// modelActions. modelActions is an ActionGroup, by itself it$ N9 D; [- \+ j7 o5 M( }6 D
// has no notion of time. In order to have it executed in
& X! D8 U5 j9 i a // time, we create a Schedule that says to use the
! Z: I7 H9 f! c% a; D // modelActions ActionGroup at particular times. This( ^4 i S6 q* n' f
// schedule has a repeat interval of 1, it will loop every4 @. w# U$ o; Q
// time step. The action is executed at time 0 relative to5 o. z% W7 {5 g1 b
// the beginning of the loop.- q; j4 @* k+ t& g' u/ Z$ A
* Q2 ?& r, X$ L1 R* K2 h! ?8 }8 w // This is a simple schedule, with only one action that is
( r" n7 I( H; g // just repeated every time. See jmousetrap for more0 `" {5 p( |6 e2 b/ C
// complicated schedules.
5 B& i0 H3 t0 l/ d% ^3 j
# U# |% O# C, ~ modelSchedule = new ScheduleImpl (getZone (), 1);
% H' y% x4 ^2 I0 X: h modelSchedule.at$createAction (0, modelActions);6 D4 | `3 D; E" {/ {
) }7 O1 q+ H: D! n1 | return this;
* `, h: e' B& o8 c; a2 A } |