HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:! q _$ Y% j. P b# Y2 X8 C
; T, M1 h3 ~2 b& j& c# ? public Object buildActions () {
4 r M- u5 ^5 [3 X7 }/ \ super.buildActions();$ }! N' P) L" R- X f) i
( M" Q/ z' p( M( ?+ s6 O // Create the list of simulation actions. We put these in
% M W5 N0 K4 D1 z // an action group, because we want these actions to be
' D7 O4 f& Q% g // executed in a specific order, but these steps should
0 A) y l# D7 h // take no (simulated) time. The M(foo) means "The message6 T2 E( R6 p1 }5 T8 r
// called <foo>". You can send a message To a particular" t$ {7 i$ |* \, g
// object, or ForEach object in a collection.2 `/ |5 F* A+ c9 t$ R
% I) Y8 N- v9 _& P# d) ] // Note we update the heatspace in two phases: first run2 {# ?( H' E0 F3 K
// diffusion, then run "updateWorld" to actually enact the
+ x+ ]7 `$ n; ~1 b // changes the heatbugs have made. The ordering here is$ u& i+ r! w( c9 O3 S% Q3 ]# I) i+ e) |
// significant!
. F* D7 s( t4 m0 {0 c$ C" t% |$ t2 y ; Y0 w9 F: a; t
// Note also, that with the additional( a# f6 }1 S& n( m o; f2 c
// `randomizeHeatbugUpdateOrder' Boolean flag we can
0 f+ I5 P) Q+ C6 o, P ` // randomize the order in which the bugs actually run+ A0 r3 ^- O/ ~3 v/ {2 x
// their step rule. This has the effect of removing any: Z. V1 @( | P7 u8 Q
// systematic bias in the iteration throught the heatbug) h8 Y8 g* c5 h! |; W# i0 T
// list from timestep to timestep
% O1 j' y8 r& x. o
7 D) u1 y2 b* M // By default, all `createActionForEach' modelActions have
6 ~1 p/ g$ z6 @1 w2 h8 B: d // a default order of `Sequential', which means that the
. `- P8 Z0 Y/ X+ f9 C // order of iteration through the `heatbugList' will be& |' C1 p3 g0 E) l) N
// identical (assuming the list order is not changed
& v2 e8 C* F w- D5 e- L1 W // indirectly by some other process).
8 Y7 s! {6 W4 T3 j % `# S% {8 S1 d7 ~& e; G! h
modelActions = new ActionGroupImpl (getZone ());
+ P7 a; u9 v$ i; o$ ?7 M$ \( O" t2 \$ G0 o, P9 w; q
try {0 l) {2 K; w- z [6 V8 F
modelActions.createActionTo$message5 b5 l/ r& |2 t% |
(heat, new Selector (heat.getClass (), "stepRule", false));/ `0 C4 U4 k5 `9 [% ]% X l4 H0 u) t
} catch (Exception e) {. P; @; K" {6 J% \2 m) o1 ^( q* o
System.err.println ("Exception stepRule: " + e.getMessage ());
J. S! G. s% X& ^9 ^8 Z }
( S7 P" I/ Y! U/ }0 e/ b$ [
8 i- h; @& Q# {$ N try {" a# F( U$ n# V2 F" Z
Heatbug proto = (Heatbug) heatbugList.get (0);! C9 S( ~1 `3 j: j+ p# t! r
Selector sel = ! y) Z( N1 z1 |5 }4 x8 \
new Selector (proto.getClass (), "heatbugStep", false);. B1 O% k9 p0 z2 _
actionForEach =1 K, t; x* ^/ u
modelActions.createFActionForEachHomogeneous$call
3 G: | y1 P/ \ (heatbugList,
* ]' f4 G8 w0 H; { new FCallImpl (this, proto, sel,
8 s+ l3 C/ Z! V" G new FArgumentsImpl (this, sel)));
/ _% L7 K9 P( s. D' @ } catch (Exception e) {% n1 J8 `) K; G/ ~
e.printStackTrace (System.err);5 y, C, [' j- L
}
9 P5 B6 \3 U4 ]: w+ B H- Y0 S5 n
$ p! u* W+ n# V6 |2 R' d syncUpdateOrder ();
# B& P" E- T; H d" @
- ^; m, b1 B; q, f' n try {
8 ]9 S7 P* v8 C* {; p8 ? V modelActions.createActionTo$message
3 r4 M% C& b+ O; |0 ^5 G/ y e (heat, new Selector (heat.getClass (), "updateLattice", false));
0 b+ @( l N4 P6 x } catch (Exception e) {
5 O- }" M& G2 V) e System.err.println("Exception updateLattice: " + e.getMessage ());
" K7 w* b$ a0 Y8 a' y5 z& l& G }5 n* E" a' W7 X; O% t
/ v( b3 X* [& e% r // Then we create a schedule that executes the
4 w! W4 o b: W( m b( R4 B // modelActions. modelActions is an ActionGroup, by itself it
" U8 S- I; w- I( W // has no notion of time. In order to have it executed in5 O! X1 K4 y, ]: |+ v* W0 w+ t
// time, we create a Schedule that says to use the
: b" n- y9 r& I. ]* h; n; H- B // modelActions ActionGroup at particular times. This
+ y) \) i% _7 K i( ^" m* B // schedule has a repeat interval of 1, it will loop every
+ }) r$ t6 u- {' n // time step. The action is executed at time 0 relative to4 ^6 Q4 Q/ k4 k0 B! ~: P
// the beginning of the loop.
! o) H( Z @1 H8 N& L' D2 ]8 E7 G
4 B" v F: d3 T, @ i, ]" E& c // This is a simple schedule, with only one action that is# l0 k N7 s1 ]/ G8 t; v! O
// just repeated every time. See jmousetrap for more$ I- g' ?9 |1 j
// complicated schedules.
9 D; a9 A1 J/ v: h( W5 e
8 b! u+ A! X( S5 g5 E. K0 A; S modelSchedule = new ScheduleImpl (getZone (), 1);( h: R; e/ K8 G$ r L: U
modelSchedule.at$createAction (0, modelActions);0 S" [5 p/ I: E% P" b
) y& p% ?9 u! ^7 z- V% Q% v return this;3 Q% n" C' r. r9 \4 S; y: y" P
} |