HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
8 h! ]3 f4 W& n0 C) c- ~. B7 ^5 e& J0 a9 L% x
public Object buildActions () {% m) U0 G, m9 ^6 E, e
super.buildActions();
6 L- B. J3 H* |! H2 X. B
: H) L8 T9 r( v& G6 B% o // Create the list of simulation actions. We put these in
7 u: u {. k8 x" ^! v& P' k // an action group, because we want these actions to be
4 ]3 ?/ H) S) |6 v& P! t // executed in a specific order, but these steps should
- C* U) w! p$ a) y // take no (simulated) time. The M(foo) means "The message
# Q: d6 G7 L' J" i+ Z // called <foo>". You can send a message To a particular
* ]7 s3 Z+ t4 [ // object, or ForEach object in a collection.$ l0 S0 J9 J! U( M3 X
) w& D4 W- g- r1 X; V0 r
// Note we update the heatspace in two phases: first run
( N, Y; g% x3 C& y5 n% W // diffusion, then run "updateWorld" to actually enact the/ s6 A# r8 ]% ]# ?; ~
// changes the heatbugs have made. The ordering here is
n0 `) M* `$ c8 A% @ // significant!
4 ?" r- }, E" X" q+ n9 ?1 _1 d' L/ g; N * y: }, w v1 _, n* g
// Note also, that with the additional
0 K! Y7 E# U! o$ l2 D; | // `randomizeHeatbugUpdateOrder' Boolean flag we can, \$ f2 t/ C6 o% N, h9 \
// randomize the order in which the bugs actually run+ V5 B' P/ K0 E$ k- c
// their step rule. This has the effect of removing any
# \& R+ n8 F( ?) N6 ^ // systematic bias in the iteration throught the heatbug9 E; u% j+ `6 U1 C0 l! x
// list from timestep to timestep
% X3 | t0 C6 u& P" B, q& X * R# j7 M; ^4 A
// By default, all `createActionForEach' modelActions have- B8 u' \! l; r, z" m' `! }
// a default order of `Sequential', which means that the. p! d( g2 `0 T- I% U
// order of iteration through the `heatbugList' will be
) o, K" o3 [: z2 w4 c // identical (assuming the list order is not changed
, U0 }" t; o; m+ w( K // indirectly by some other process).% n% Z% o; D" p" m/ D0 u2 { J
+ ]. [8 v. i4 C" v4 W& ? modelActions = new ActionGroupImpl (getZone ());5 [1 P, |* u$ p
% U6 {/ F' n; t, _; \ try {
) |0 T# i8 k( D4 B8 B" d& p* Q modelActions.createActionTo$message
" ~, s" N3 i% o* G: s4 r (heat, new Selector (heat.getClass (), "stepRule", false));
# X9 q1 a0 ~9 ~3 W3 n& x" m% ` } catch (Exception e) {
# O- h; M6 B& {9 | S System.err.println ("Exception stepRule: " + e.getMessage ());# }; i8 _5 ]% _ Z
}
" U+ y* r. T& r9 z4 ^. L: j( O- ~, {& }3 T6 X
try {
( g3 O/ `8 u+ T/ Q8 y6 g Heatbug proto = (Heatbug) heatbugList.get (0);9 @/ ?1 T X# Y
Selector sel =
* ?) o. m, \$ A! ^ new Selector (proto.getClass (), "heatbugStep", false);
$ C4 _" r1 z! |0 d: m actionForEach =
6 F7 F* [5 w7 |. O- B' N/ c1 K modelActions.createFActionForEachHomogeneous$call
$ \4 H* C/ N7 G. Q* a (heatbugList,4 A& [$ l8 a# c
new FCallImpl (this, proto, sel,
8 H, S7 {' g t new FArgumentsImpl (this, sel)));$ O3 B) a) {4 }7 \
} catch (Exception e) {
! R8 C# |1 e7 D6 H- z e.printStackTrace (System.err);
+ G8 b4 U0 I o, k! l, N- m# ]2 N }
: k/ x3 A0 v/ H . u* A) G. z; l/ I% P
syncUpdateOrder ();
8 H# S8 |9 K* j+ i5 F( j& E3 f3 b+ R" D! o4 J4 j8 j. U
try {
- k5 T1 }4 d5 G' w0 ]$ D modelActions.createActionTo$message
1 x: \, r6 A/ V* M/ e (heat, new Selector (heat.getClass (), "updateLattice", false));
6 H8 N1 P5 z$ r( P# [0 Q6 S- N } catch (Exception e) {
* H: P; V% e+ I+ `& A6 x. J System.err.println("Exception updateLattice: " + e.getMessage ());
- r9 M# k6 E6 d! o" h* K }
: V/ X, w2 T0 R2 I1 F7 ?
, q! U; O2 m3 |" F/ ~- [ // Then we create a schedule that executes the
3 }3 P8 t! e+ j; o2 h, k5 f6 j r // modelActions. modelActions is an ActionGroup, by itself it
- P4 t0 C/ L* T/ j, A' K // has no notion of time. In order to have it executed in
( O* L: j( [ b. k/ u+ J5 R) R // time, we create a Schedule that says to use the
/ G+ c# f4 V' z# \ // modelActions ActionGroup at particular times. This4 F0 O) O" v m# e) [5 l" l9 i
// schedule has a repeat interval of 1, it will loop every& ^& P4 L; a0 e' |4 r8 L
// time step. The action is executed at time 0 relative to
$ L0 o( I o" X% C, d // the beginning of the loop.
+ O, f8 |6 N6 h2 I# e! G" j8 A+ h+ J6 {3 M/ F, q9 E' T
// This is a simple schedule, with only one action that is
% t$ B. H/ w3 [5 j+ a" a // just repeated every time. See jmousetrap for more
1 H" G' p& R2 G4 C- | // complicated schedules.
$ v, Q& _+ Z% i5 f/ c : m, y9 k6 P. x, A# o2 h4 o, T
modelSchedule = new ScheduleImpl (getZone (), 1);
' l: I$ \. V8 A modelSchedule.at$createAction (0, modelActions);7 l$ b& g; V" [2 Q
4 k6 B4 u. G) E9 I% q5 H return this;
! g, \+ l6 \5 B } |