HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:, a) ]( x; v( s: F* U A
. Z- O$ J) H% \ public Object buildActions () { e+ t8 w) A3 F8 s- c7 b' B. O
super.buildActions();' D: e0 K3 `* l% `8 @
6 m3 ~. ~6 U+ V6 ]7 ?
// Create the list of simulation actions. We put these in
, x1 z9 L$ p$ @2 l8 A* T // an action group, because we want these actions to be" B8 p" l9 x( N! |5 R
// executed in a specific order, but these steps should
! @& S T% G9 g% K6 R" O! ~ // take no (simulated) time. The M(foo) means "The message% z% H7 I! o$ D* b3 E
// called <foo>". You can send a message To a particular
" x, O& H- N, T) e( A' p4 ]- _, D // object, or ForEach object in a collection.
3 w5 K2 J) m% X4 \3 X6 q
- u$ R5 t% k( g& g# I1 d6 B2 d // Note we update the heatspace in two phases: first run
$ w* }! @$ f4 d4 e2 p( D // diffusion, then run "updateWorld" to actually enact the
, v+ s) Z7 Y( O2 E5 r# h // changes the heatbugs have made. The ordering here is
2 A0 ^" O/ B* I3 k // significant!# n9 E2 ^% c9 Y& D
* B' Y# e" A$ z) K
// Note also, that with the additional; T: o% X `, h o5 A u! x
// `randomizeHeatbugUpdateOrder' Boolean flag we can+ v+ s: ~2 O5 X1 Y, }4 s0 t
// randomize the order in which the bugs actually run
6 k* Z$ [9 f% D9 J/ w // their step rule. This has the effect of removing any9 \# {7 p9 v, ?
// systematic bias in the iteration throught the heatbug
2 j& D6 I1 m6 {! c$ R* S8 H // list from timestep to timestep
8 j- T, ~$ l2 i- Q' m, Q7 A 1 ?1 g0 n2 _/ y0 @# D/ W
// By default, all `createActionForEach' modelActions have( Z2 H7 ]# u7 R" U* O" d- l
// a default order of `Sequential', which means that the8 F+ C# t4 R/ [
// order of iteration through the `heatbugList' will be
6 \2 Z. O2 Z: I6 z6 Q/ V // identical (assuming the list order is not changed
5 I# }0 i1 d0 q // indirectly by some other process).+ F; x7 Y9 F% r" n/ B- }! p8 R( B
: t0 ^* L* w `4 O
modelActions = new ActionGroupImpl (getZone ());
& `0 d! M0 k7 \0 b% J- V' ?9 m! A+ T+ t; C( T E6 G, W _4 a
try {
. f6 F4 N* _; K7 L7 Z. c modelActions.createActionTo$message
2 Q8 y5 S5 o+ f4 } (heat, new Selector (heat.getClass (), "stepRule", false));! ]- p; |0 i4 F' {, Y1 P5 [
} catch (Exception e) {
8 J# x! j1 T. ]; {% n: J2 f System.err.println ("Exception stepRule: " + e.getMessage ());! f* W S1 ?& N6 u9 m
}
( X O$ o' L7 Q: X1 H2 f% J
1 T6 U! O( N& Y/ I try {
1 e% u" z7 g. ] Heatbug proto = (Heatbug) heatbugList.get (0);4 c& } {0 n8 [3 E+ e
Selector sel = & \3 O9 z( F) r- j! W
new Selector (proto.getClass (), "heatbugStep", false);
: l; s+ v3 ~- U actionForEach =% J) }0 g) y2 D4 V+ `# Y% N
modelActions.createFActionForEachHomogeneous$call- K' Q5 [2 g; A1 t* E
(heatbugList,
0 o6 D% X+ \* F- A5 p7 \ new FCallImpl (this, proto, sel,& P+ M A0 U. d* f
new FArgumentsImpl (this, sel)));
/ T- m' Q7 m6 X' T# n4 K" _ } catch (Exception e) {
. l! g* d: G- \- s4 w2 V4 j; R e.printStackTrace (System.err);- h% s0 U0 S! D0 g- P. ?2 |
}8 d# p, r6 y5 h) `' `6 S
" U8 c9 G o- x+ s8 Z syncUpdateOrder ();5 f6 R3 k! h1 } a0 a( r
4 E" o4 B* L" H& @ X9 W, m3 l
try {% C, T' x- a5 ], A3 }( z, T
modelActions.createActionTo$message ( p7 t' \1 o1 G9 l# z) Z
(heat, new Selector (heat.getClass (), "updateLattice", false)); f: m0 g0 y9 Z) M! k( \0 j$ l
} catch (Exception e) {5 ^1 ^' z: a5 S, N" t# L5 D! j* M$ k
System.err.println("Exception updateLattice: " + e.getMessage ());
$ O7 T/ i7 `" }6 T$ c }$ e4 E* B( ^: s0 K
, l3 {! X1 U6 r+ g6 U: X6 S // Then we create a schedule that executes the% e6 e# I# K9 s) L7 m: ?% m2 [$ R
// modelActions. modelActions is an ActionGroup, by itself it
/ b" V8 `! T+ M; s" \5 _- p // has no notion of time. In order to have it executed in
: d. n7 {, J0 C9 s // time, we create a Schedule that says to use the
8 G: p2 u5 O6 }7 y; L" u+ B // modelActions ActionGroup at particular times. This6 C, r& {% O) Q5 r) p; X0 U
// schedule has a repeat interval of 1, it will loop every
! n, z6 q& B' D, N L // time step. The action is executed at time 0 relative to
9 N5 {, U9 A# P% H: u // the beginning of the loop.* f4 i5 }; _* V6 [3 C
+ P% w4 {- Y7 E6 ^# x
// This is a simple schedule, with only one action that is6 z% ^9 y; r/ M7 U! \- S6 T" y
// just repeated every time. See jmousetrap for more7 _- F- _/ K5 F8 z1 ~+ L( d
// complicated schedules.
! b0 s0 d t$ y6 O, X! t4 W% p5 w + M) E& U& b& g: N6 t5 r
modelSchedule = new ScheduleImpl (getZone (), 1);' N# ^. }2 v3 U& r2 _5 B% w8 D# N! U
modelSchedule.at$createAction (0, modelActions);
! i5 x- w5 v- h, W2 P 3 O) r1 [4 r# P* J" n9 h i& M
return this;, l+ w* ~2 E' O
} |