HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:9 ^6 j+ v. x& Q- x
: w8 i6 q/ i9 s, ?2 c public Object buildActions () { a! |, X$ `+ R( p7 D8 n6 F6 a" X
super.buildActions();
/ d7 n4 H) N9 Y% [: l: h) ~ 3 U: K$ c% @+ ?* {9 I
// Create the list of simulation actions. We put these in
7 A* X% h% i, ?7 R; r; P // an action group, because we want these actions to be" x) s8 F/ l X# d( e& S2 b
// executed in a specific order, but these steps should6 a7 e. V2 Q6 }2 h0 Z9 l
// take no (simulated) time. The M(foo) means "The message1 T- N! Y( C4 G# b) j
// called <foo>". You can send a message To a particular: J/ Z9 A! J' o: k+ Z6 `0 X) b
// object, or ForEach object in a collection.) O6 x f6 w1 a; H( D; V
4 P3 \$ ~; F( Y) O+ R0 e% m // Note we update the heatspace in two phases: first run
+ X. t% z. w7 Z9 v5 S // diffusion, then run "updateWorld" to actually enact the: B3 ?% f9 m9 I- y/ \+ m$ @% g, R
// changes the heatbugs have made. The ordering here is
' d( ?6 M K7 J! g$ a- P- l1 A7 C // significant!' E$ A1 Z3 w0 {
' U& \, ?/ b+ U+ P // Note also, that with the additional) @/ ?. M+ N) A9 j! }0 B
// `randomizeHeatbugUpdateOrder' Boolean flag we can( k* I5 @ l. a$ n" g( h
// randomize the order in which the bugs actually run9 N2 }2 |6 f3 ~: f. | c
// their step rule. This has the effect of removing any0 x' x1 Q/ F" ~: ~7 \5 Z
// systematic bias in the iteration throught the heatbug$ `7 o& J' M1 B# c" l5 B5 r% ]0 k! J
// list from timestep to timestep
# A$ p' R# |1 X c7 G$ p; \1 @. y 0 u ^3 F) ~( A' Y
// By default, all `createActionForEach' modelActions have6 r# q0 p3 t) r* W0 q- y4 J
// a default order of `Sequential', which means that the$ f0 O$ p. Q( D4 a: n5 [) q
// order of iteration through the `heatbugList' will be
# [, u0 d0 p' M& l- }% F // identical (assuming the list order is not changed$ b. u) G! @& {4 c6 d3 _
// indirectly by some other process).9 P C% o8 T: o
2 ^5 d1 O% U1 n Y) B modelActions = new ActionGroupImpl (getZone ());
' d0 k2 r5 K) X
; Y4 l7 t+ Q. V( Y- k try {
7 P# [7 P. u9 p/ u: } modelActions.createActionTo$message
6 x- P1 n) B; Q7 e! ]6 _ (heat, new Selector (heat.getClass (), "stepRule", false));7 p& O5 K+ o4 d
} catch (Exception e) {2 G8 r, m7 _/ J# r( ^6 h2 ?
System.err.println ("Exception stepRule: " + e.getMessage ());! W2 l) u8 n/ ^( p* k1 T3 r$ p$ k
}
5 `/ \( O8 h0 r
9 n9 ^2 s7 R+ f$ G try {
2 Y1 Y% v" G( j6 G7 y Heatbug proto = (Heatbug) heatbugList.get (0);
! t4 _% r4 G7 Y Selector sel = / g6 u9 e$ L: a+ p/ |# a/ x5 V
new Selector (proto.getClass (), "heatbugStep", false);4 y8 K- @$ {5 L7 }' [* l4 }
actionForEach =
{" n0 L$ `2 }. X modelActions.createFActionForEachHomogeneous$call3 Q A! Y1 U, ?4 `+ z( L" g1 I5 g
(heatbugList,
! v/ j" x5 b* ~5 \$ S new FCallImpl (this, proto, sel,
]" P( E7 |: s; |/ h# w new FArgumentsImpl (this, sel)));
- S) w, e/ `7 j6 s } catch (Exception e) {
8 f+ D$ F& Q( r e.printStackTrace (System.err);
/ Z7 ]! L, Q! k1 o/ `5 C }
8 M8 z3 b4 R+ T# C( X
6 @+ O7 ^! w4 g( E* \ y# J# c5 p syncUpdateOrder ();
# [. Z, F3 F- ^$ m9 v$ J
6 M+ b! i% p8 [$ Q try {
; j( D3 K3 U: P0 j: t modelActions.createActionTo$message : m' m H8 \9 z* d, R# |
(heat, new Selector (heat.getClass (), "updateLattice", false));3 n+ t A, V; }+ ^& M
} catch (Exception e) {
. _7 q* R0 x' j& f System.err.println("Exception updateLattice: " + e.getMessage ());, D7 E# y" h! @ [ `% K
}0 A& b0 @) n5 @
- T$ P6 s3 }' w @9 Q4 ] // Then we create a schedule that executes the
4 Q" u/ [: }% s // modelActions. modelActions is an ActionGroup, by itself it
8 e& W: }" S( E: J' g // has no notion of time. In order to have it executed in
- e: m& y; c( E) F // time, we create a Schedule that says to use the
1 w+ i6 g: M# E l B // modelActions ActionGroup at particular times. This
9 H/ G6 C! e0 p" T* n/ |) O2 Q! ?2 M7 U // schedule has a repeat interval of 1, it will loop every5 F, B5 n. [+ G p/ F; V
// time step. The action is executed at time 0 relative to$ P1 D6 p5 i* u1 c
// the beginning of the loop.$ X4 U' N$ N" Z" N9 i! l
5 e* A$ D: B- R( @6 H( Q6 n) @ // This is a simple schedule, with only one action that is' Y7 e7 |8 @8 o" d6 H A/ I8 T
// just repeated every time. See jmousetrap for more# Z8 m9 i* h8 N* G* l
// complicated schedules.
! T5 d c$ Q- }+ c* s# e1 r2 E - F) {5 S$ S9 A9 }8 t- B- J- k
modelSchedule = new ScheduleImpl (getZone (), 1);/ y) `' b$ c% A d0 i# V
modelSchedule.at$createAction (0, modelActions);0 d7 r# f8 e w0 j
6 k6 d' [- g; @; \2 A, [8 N0 J return this;6 ?8 }" z7 @3 |) B" }9 B4 l" u
} |