HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:7 G* J' y9 z, p& Q, G
) y. x: d; P0 ~+ j9 f p, e! \
public Object buildActions () {
9 x" H/ `" I/ H+ V super.buildActions();, m) _+ j# L& i# E
4 C& n" X8 r& C v2 j
// Create the list of simulation actions. We put these in
0 Y: t9 l, r2 Y" f5 ]' r) e // an action group, because we want these actions to be8 O6 B1 A$ l0 c0 M7 M1 A5 @* }
// executed in a specific order, but these steps should8 j) d; q0 J3 s
// take no (simulated) time. The M(foo) means "The message
' n7 E. P2 b @$ K5 D% p: [# Q8 |. I // called <foo>". You can send a message To a particular
' C1 a% R1 S2 o5 I; K // object, or ForEach object in a collection.1 ~+ d9 G% m9 s: S
" x) m2 O* M5 Y2 {' k" Z // Note we update the heatspace in two phases: first run3 p8 |- y9 X; A8 u% }: g, h+ o
// diffusion, then run "updateWorld" to actually enact the
( T7 q5 o# K+ y* Q d4 r5 X9 a // changes the heatbugs have made. The ordering here is- l0 W8 z$ D- |
// significant!
* P: j0 [7 K$ C( B7 l2 w& p
p0 a/ V$ o$ V$ L9 z // Note also, that with the additional6 x y9 b& t: D) [3 f
// `randomizeHeatbugUpdateOrder' Boolean flag we can" V8 N6 S3 U8 N+ J: h
// randomize the order in which the bugs actually run& _, m" m, r- A }) d2 I: {/ \9 o; u
// their step rule. This has the effect of removing any0 E$ ~' c$ E& V
// systematic bias in the iteration throught the heatbug) T2 s7 |" Y, A$ Z' w1 k! Q% C9 x
// list from timestep to timestep/ L; k/ p! J( V2 R, h' w' Y
/ x6 Z# I, s8 L ^3 G) N2 Q# q
// By default, all `createActionForEach' modelActions have
, `) ]* ?# n+ [ |- B // a default order of `Sequential', which means that the8 m) m4 l d) @% t' s" p+ ?8 x
// order of iteration through the `heatbugList' will be+ e. I' s7 i9 ^4 R+ l! |& @7 N" T8 l
// identical (assuming the list order is not changed
, U* ~- U& Y4 R // indirectly by some other process).0 n+ K [+ M% Z3 H* }
1 |) a6 k- c; U. Y* j# K8 |0 ~- L/ x& V modelActions = new ActionGroupImpl (getZone ());4 m9 N$ C6 G! ~$ _
0 n4 V* `# E: y: n6 G1 U9 A+ r" W try {
. h3 @1 P5 G7 b1 T modelActions.createActionTo$message
# S7 z/ V& D+ `2 w" `6 r (heat, new Selector (heat.getClass (), "stepRule", false));
8 j: ~/ p' k. b+ D* H/ q } catch (Exception e) {
9 K4 T1 c7 z. V System.err.println ("Exception stepRule: " + e.getMessage ());/ c/ {4 ^) O* \! Y- I
}) u, k7 |9 H$ Q9 E( J
5 e! d* f7 w( {: p% [) K try {5 x% M/ J9 U) d: g7 T* b( E
Heatbug proto = (Heatbug) heatbugList.get (0);
9 G; i! Q& K6 W' P) h4 ^. \! q Selector sel =
. V! K0 L6 |8 l8 i new Selector (proto.getClass (), "heatbugStep", false); w0 j4 ^5 z" q3 N
actionForEach =) }! {1 o0 M. M, `1 |$ K
modelActions.createFActionForEachHomogeneous$call/ m7 u5 E! B, x7 X, [/ {3 g2 |$ q7 \. k0 @
(heatbugList,
- F1 W2 m! S( G6 d6 t, q new FCallImpl (this, proto, sel,/ n! |% y. t* x# m4 W
new FArgumentsImpl (this, sel)));
1 g7 J( \$ w5 ?+ Z } catch (Exception e) {
- X" a( c9 Y3 A6 C e.printStackTrace (System.err);1 \* g. U6 u! Z5 W) t
}9 p9 K2 }; a4 n/ P% F4 F+ P
+ t( O& P0 l* }/ r2 D; C syncUpdateOrder ();
. c7 w: M: i' a; s! t9 u8 O) A, v1 ^7 S& g! U- v
try {" g0 S! @9 e0 |. u; B% ~
modelActions.createActionTo$message
5 Q: T) x2 |2 h: U6 o8 |8 y (heat, new Selector (heat.getClass (), "updateLattice", false));
5 a2 X" p8 j3 x& ~4 X } catch (Exception e) {% `! i- Z8 Z. q- ?' E
System.err.println("Exception updateLattice: " + e.getMessage ());* G( ]# H! [7 b/ q! }
}% ^5 }1 Z# ]8 U% p4 _' ~ \
4 v2 R+ O$ q; |8 O D
// Then we create a schedule that executes the2 J5 K- |# Z; O9 t7 }8 K
// modelActions. modelActions is an ActionGroup, by itself it
! n( w$ r9 i- I4 x // has no notion of time. In order to have it executed in0 u& W% G. i& m& O
// time, we create a Schedule that says to use the, Z: l; {3 j1 \- ~# n3 `
// modelActions ActionGroup at particular times. This
1 k2 K* A- @0 q/ P3 A! o3 t/ Y // schedule has a repeat interval of 1, it will loop every
: d3 |) i8 x3 T1 {) e // time step. The action is executed at time 0 relative to
4 W: R s m4 I# X1 k$ L( z // the beginning of the loop.* V2 ~( d% }5 t* I. K+ _
" {0 |$ S/ a! K5 N3 B. f% } // This is a simple schedule, with only one action that is6 P+ @4 j4 E0 [4 X
// just repeated every time. See jmousetrap for more
: ?4 T4 A2 D5 M6 A3 o! q // complicated schedules.
5 j) o G( _ u$ w 3 {% n4 i& w( l
modelSchedule = new ScheduleImpl (getZone (), 1);4 F4 E2 T0 w! u' e$ }
modelSchedule.at$createAction (0, modelActions);
9 ]2 U* O$ G2 _7 }7 o5 T
7 f4 c- g9 u" Q+ R N& k! @0 m$ n return this;+ ` V: T' o, Q- ^6 D
} |