HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:. | d' t- u" O3 Y3 L+ J9 ]) b; x
' K: I9 {! u( i& j( E$ L' k" ?
public Object buildActions () {
( j7 _+ h4 {9 t+ p6 Z G1 V+ R- \ super.buildActions();3 U6 k5 ^# m5 V
3 d7 ~7 N9 }; o) ]/ w // Create the list of simulation actions. We put these in
5 W- b6 m( h( E8 S! j/ R // an action group, because we want these actions to be1 |/ F. S7 K. v
// executed in a specific order, but these steps should
Q9 d: q- G: Q, G1 s2 \2 N // take no (simulated) time. The M(foo) means "The message( H) S7 x( W& O9 t* ^( P
// called <foo>". You can send a message To a particular
/ j' B( f1 h5 ^+ c. K% G- k. e4 w // object, or ForEach object in a collection.
) I, q/ E+ c7 U" i6 A9 v * k* S* Y. W: ^" R5 O! v
// Note we update the heatspace in two phases: first run+ T+ e) u0 l H/ R2 X
// diffusion, then run "updateWorld" to actually enact the2 `6 Y9 p' W5 O! m& G
// changes the heatbugs have made. The ordering here is
) S0 f1 H2 z+ j // significant!
0 o0 z! s# r+ z. l/ @3 X8 k5 e ) l- |* i; b4 J9 U: K" Z
// Note also, that with the additional
3 q7 f, ]' ^+ y7 y, X // `randomizeHeatbugUpdateOrder' Boolean flag we can2 H, Q ^- Z' v; _( x5 ^* H
// randomize the order in which the bugs actually run
; _ l9 E5 V+ @, x // their step rule. This has the effect of removing any& E3 E% f. _/ c7 q3 r, T
// systematic bias in the iteration throught the heatbug
. A! E6 R) L o6 _; b1 H // list from timestep to timestep
) E) N( e+ y B3 R 6 E( r# _. H6 J$ X
// By default, all `createActionForEach' modelActions have
. B. ?, D" `8 R( @9 [. F // a default order of `Sequential', which means that the
4 A8 ?: F- |4 n0 w0 l- v // order of iteration through the `heatbugList' will be
" P) ?; c6 I6 n1 @1 l6 m A0 f // identical (assuming the list order is not changed$ i% b% L5 R, _" n4 q
// indirectly by some other process).
* l3 ?0 T! U1 h9 u/ |7 u6 }8 f
( O+ l0 J9 m# h7 p( e+ `2 h. b& ?6 t modelActions = new ActionGroupImpl (getZone ());
/ n$ a: C& @& ?3 I
* i, d- ^1 N( s try {
/ I/ E6 q7 y1 W( h modelActions.createActionTo$message* H3 o- {+ a9 g, U
(heat, new Selector (heat.getClass (), "stepRule", false));1 [, E! P$ x! g0 a- r" @* v$ U# h
} catch (Exception e) {, e* N, D7 u+ f ]0 H; ~. m
System.err.println ("Exception stepRule: " + e.getMessage ());3 V/ d* d3 k) ?5 c
}8 [0 Q4 R& S: z% }7 G
$ ^5 \4 n$ j A9 w9 Z4 ]" F try {
3 Y* _6 I, |9 I; S2 ~ Heatbug proto = (Heatbug) heatbugList.get (0);4 L5 n4 C( t8 a( D% K
Selector sel = 1 W" c r, A4 ^; R* A7 g( h7 ~
new Selector (proto.getClass (), "heatbugStep", false);- [- Y2 B( q; w
actionForEach =( ~' N1 L1 u% b% M+ Y" c' }
modelActions.createFActionForEachHomogeneous$call2 X# b7 A% t+ Y0 @1 v1 X9 a% x
(heatbugList,9 W& a+ b0 ]; J& A& K J7 t: A U4 |- A
new FCallImpl (this, proto, sel,
% K' u' H& z. x1 h8 n* F3 P& ]7 J4 ] new FArgumentsImpl (this, sel)));$ W# O1 I1 f. z% g! x! h# D5 G
} catch (Exception e) {
. t, \+ R6 ?& q6 p0 V8 { e.printStackTrace (System.err);8 t3 x: L% M, s# R6 D8 F
}; l) u2 x, E& A, f2 |
/ ^ v1 |8 K$ h
syncUpdateOrder ();& t2 {7 B' {, O4 z3 p- m
. X( R ^* H( F* E8 b try {/ |, E7 m1 I; j9 @. b( n. j
modelActions.createActionTo$message + O; C7 F# t7 n- Y) Z9 O% y$ U
(heat, new Selector (heat.getClass (), "updateLattice", false));
! W8 R4 `" ^6 O7 ?/ F/ z } catch (Exception e) {
" L9 P8 Z% _5 h% ?; L4 g. b0 s4 n System.err.println("Exception updateLattice: " + e.getMessage ());
; j9 }; x: v' x# i }
`1 R7 ~7 p( W+ Q, O4 l
* K: u% w2 ]" o // Then we create a schedule that executes the% q8 R) H7 {, o4 n. p4 A
// modelActions. modelActions is an ActionGroup, by itself it
$ D4 M! Q) S7 Y! M7 g! \5 ~ // has no notion of time. In order to have it executed in
W4 v) k. D' ^$ }) R% ^2 ] // time, we create a Schedule that says to use the
7 J- I3 m* Z" G: X, m, b4 N7 ` // modelActions ActionGroup at particular times. This7 M2 D; W% d" L- v! Z3 T' n
// schedule has a repeat interval of 1, it will loop every
/ i& h2 e- C* z% V: e z // time step. The action is executed at time 0 relative to6 n6 j" G2 f- A2 }- h, J
// the beginning of the loop.* U) \3 O! M! H, s) O, Y
; Y0 |' m2 l, k3 M. | // This is a simple schedule, with only one action that is# _7 C! |% M/ D$ v8 W: e" i. N8 G
// just repeated every time. See jmousetrap for more x) E' x! ~8 G1 w8 P$ q0 i
// complicated schedules.8 {- ]9 u9 ]& F' Q9 Q( d7 Y6 \
% m$ a7 Z+ s5 k3 P9 K1 z, f1 q$ `! r: j modelSchedule = new ScheduleImpl (getZone (), 1);
. n$ N5 W1 i0 L" J! ? modelSchedule.at$createAction (0, modelActions);
4 k7 g% l S. A
( I" e+ q( p2 V7 s$ t return this;1 k! \, Y4 C5 P% i( P9 }, Y+ d* j0 ^
} |