HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
& ]4 [$ L0 a7 n u8 ]& {
: L0 m4 Y. S, r5 T public Object buildActions () {
3 t( \* Y% u o5 ~& Q super.buildActions();# ~9 M* l: C: m) z& T5 z* o
. ?$ R6 B1 \1 a. K3 y' s7 Q
// Create the list of simulation actions. We put these in
! V6 X3 T9 Y5 X% |6 B9 E // an action group, because we want these actions to be
% x" Z8 ^# ]& j8 T1 u: L // executed in a specific order, but these steps should
( X! g- Y# R, q5 }# z$ L& w // take no (simulated) time. The M(foo) means "The message
! b% ~% N9 O/ ` // called <foo>". You can send a message To a particular, c6 `: m2 R( |( a3 q
// object, or ForEach object in a collection.' R- |) K- ?) g" Y
0 o- s- O1 [+ ?- T6 I3 ` k T3 A1 B // Note we update the heatspace in two phases: first run8 H- o4 Z$ t( L4 K3 k
// diffusion, then run "updateWorld" to actually enact the
$ t. Q% u4 R" s) O* o // changes the heatbugs have made. The ordering here is
+ T; E- k, e, G' a0 W // significant!& w0 y4 ~/ x" Y! @) M
- z/ W: g& g$ M: C; v // Note also, that with the additional3 _5 _9 O$ i+ y3 P. e! t- s
// `randomizeHeatbugUpdateOrder' Boolean flag we can' m( k, o3 S" z3 r) o) ^. V4 K
// randomize the order in which the bugs actually run
# a3 ]$ Y4 B2 R" n" a7 r) C* q* f // their step rule. This has the effect of removing any
. V1 T2 u' w3 v; @1 ]3 m // systematic bias in the iteration throught the heatbug4 @3 s4 p& ?" I- ]5 E
// list from timestep to timestep
* F+ i8 L* j3 A' c0 W , W9 M3 m3 U) r l7 k
// By default, all `createActionForEach' modelActions have- u/ u1 j7 c( C! u* E' K
// a default order of `Sequential', which means that the' |. x. Z" X" M+ a+ Y
// order of iteration through the `heatbugList' will be6 T3 ?8 k: `$ ~3 P, o4 P
// identical (assuming the list order is not changed9 _2 @8 Z, E5 q* E1 c2 n! S
// indirectly by some other process).2 B# i% R, r9 |3 T9 E
: l2 `+ o- m# ^$ l7 o, [ N3 l modelActions = new ActionGroupImpl (getZone ());
+ P8 b5 V- f2 o5 e8 |6 C6 H, i8 h8 r, Q
try {( r/ k: x1 U# |2 }
modelActions.createActionTo$message0 H1 F0 X: r% ~/ D% G2 N q
(heat, new Selector (heat.getClass (), "stepRule", false));# N" \5 i% P, p7 f. l
} catch (Exception e) {, I/ t) ^. n9 c' n0 v
System.err.println ("Exception stepRule: " + e.getMessage ());
& R1 o+ m4 r9 A8 J0 l" z9 y, Y( | }
1 t, w1 H, }) B- A
/ n( O: G& P4 @- V try {
& z: l$ }: o: J" _4 ]7 D Heatbug proto = (Heatbug) heatbugList.get (0);: S7 x. r4 ]7 ?$ D8 [& U f
Selector sel =
" G7 ^1 x- c( V5 A# G new Selector (proto.getClass (), "heatbugStep", false);4 { q/ Y- }# z3 M
actionForEach =
+ m; E a$ K/ j modelActions.createFActionForEachHomogeneous$call
/ A0 N0 j0 p) l; d3 C% u; g* W. R7 q (heatbugList,
2 E/ X4 x, h3 u4 G: U new FCallImpl (this, proto, sel,. Q% G$ m6 D S. F* i5 V7 N0 `
new FArgumentsImpl (this, sel)));; ^+ g& a0 h% g* {/ i4 C. D" ?- a6 s
} catch (Exception e) {
' T# D" w3 X) j; c; y/ { e.printStackTrace (System.err);
% q- F. V/ t" ~; V }" A4 i& Q& m# R a
; I& @1 f7 \: A syncUpdateOrder ();& z4 \0 j& q7 C1 g6 V
% l' P/ _, i; I
try {/ |4 P" b8 v' `
modelActions.createActionTo$message . ^+ M* n& m$ i& _! V0 G
(heat, new Selector (heat.getClass (), "updateLattice", false));1 u( L# T1 P% F4 a( e; y3 G8 i
} catch (Exception e) {
9 M4 J$ w" G5 \0 `5 ] System.err.println("Exception updateLattice: " + e.getMessage ());9 E. Y* p1 e: K3 n# j3 {4 _
}
) m/ H0 r2 n( a! a ) S0 o' d- A, A. W7 i
// Then we create a schedule that executes the
% k7 f3 |% w% Z @7 v D+ U( d* q9 n // modelActions. modelActions is an ActionGroup, by itself it! o, H: B! b* E$ i4 S! _+ J
// has no notion of time. In order to have it executed in
$ L& e* u! ~& [' D // time, we create a Schedule that says to use the
$ f5 v, F) a8 U; n6 W! e // modelActions ActionGroup at particular times. This
" W6 ]: |5 N: ]7 J- m" c) | // schedule has a repeat interval of 1, it will loop every
2 c8 x7 }- m \ // time step. The action is executed at time 0 relative to* p) Z# R6 g) {) F# P& O2 g
// the beginning of the loop.! @" n+ r+ x1 s y
: L8 n q& [# _; S- z // This is a simple schedule, with only one action that is
5 b1 E' ^. j2 f: p // just repeated every time. See jmousetrap for more1 X+ N) S9 C2 _* j; b
// complicated schedules.( L Z0 [; L7 E. { S; p
7 T0 `- s& k5 |* m! x/ V
modelSchedule = new ScheduleImpl (getZone (), 1);1 ~7 B& ]! o) \3 p+ } b' f3 j, ^
modelSchedule.at$createAction (0, modelActions);
2 R8 }1 g8 a7 n. v5 a
5 Y: H: [- u0 o% k: g1 |1 _4 v return this;. r; {, U% O. b
} |