HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
* Q6 b7 P# k! S* H' Z' _2 h/ T- \0 e( ~0 t9 T- I
public Object buildActions () {
8 ?. b2 l0 j1 Z: E% K o super.buildActions();" u( F8 Q6 S; x2 s& U* m" c5 }$ L9 V
, f1 V6 c5 k# K9 ?1 Y+ x
// Create the list of simulation actions. We put these in
8 I# F/ T) `- T% _ // an action group, because we want these actions to be
& V2 K) ]5 }5 u% e2 O$ D // executed in a specific order, but these steps should8 |( h. f. |3 H1 r1 P( H+ H0 ?
// take no (simulated) time. The M(foo) means "The message
5 u; p* k1 [* H // called <foo>". You can send a message To a particular
! z% ^+ t, t f) z5 C // object, or ForEach object in a collection.
k/ Z, d8 w# M' y* T
, {0 F) K, h) ~' v2 M% O, { g) W // Note we update the heatspace in two phases: first run) o- a0 d! C$ `# w$ ~/ [
// diffusion, then run "updateWorld" to actually enact the
" @: h" n) E9 J' t' J8 k // changes the heatbugs have made. The ordering here is( Z: C; u# r: G! g4 O- I
// significant!9 j/ B! f1 U6 k# B T. {5 t8 {
* y' s9 a4 A. Z$ t- F) X& r, x // Note also, that with the additional
; F, e/ ], T& P // `randomizeHeatbugUpdateOrder' Boolean flag we can: x H; I2 Q3 t6 D3 F
// randomize the order in which the bugs actually run
# t4 m: n, O: p6 n7 T9 N // their step rule. This has the effect of removing any! x1 l3 {+ C8 g" Q- ^
// systematic bias in the iteration throught the heatbug( X7 I, s8 o( B7 H( w
// list from timestep to timestep
8 [* o- i8 u _ ' Y. q$ r& l' v/ H/ l& Y
// By default, all `createActionForEach' modelActions have7 A6 w5 R' C& q7 R
// a default order of `Sequential', which means that the3 ^9 C% k7 H3 z% W1 N
// order of iteration through the `heatbugList' will be
' I5 z8 S% A' i: D8 `: A/ r // identical (assuming the list order is not changed" }* u B" f( g3 I
// indirectly by some other process).
* i- I9 q/ v4 i% [5 I
0 j% @& M$ Q* Q. x% h modelActions = new ActionGroupImpl (getZone ());
! F5 v* p5 w/ u) }) V8 L( s) e" U8 d) s/ f
try {0 }! H9 k5 }; T
modelActions.createActionTo$message
8 E* \" P+ \" K6 ~0 F (heat, new Selector (heat.getClass (), "stepRule", false));
" q- A, d8 i( ~7 b2 z } catch (Exception e) {
9 f8 Z# o" k* ~# M3 ?. O6 d9 E System.err.println ("Exception stepRule: " + e.getMessage ());) |$ k- {% q" q: h
}7 d+ F/ B' P t3 e
8 n2 o3 N* @. P+ r5 f: v6 |+ B try {3 z, j% l3 f8 V9 f. M" k
Heatbug proto = (Heatbug) heatbugList.get (0);
" i/ E0 i6 @' ~. g5 m Selector sel =
, ]6 {0 d" a9 U( r# \8 ` new Selector (proto.getClass (), "heatbugStep", false);7 X* e6 o" w+ o% C( t. q0 g' p
actionForEach =
3 l% A$ p9 V, G; H modelActions.createFActionForEachHomogeneous$call7 n/ c9 h: E1 X7 O" t
(heatbugList,
/ S. @' O) K1 n; m5 k% z new FCallImpl (this, proto, sel,7 g. V2 {, M4 T- [, [0 i% x/ A/ Q/ A
new FArgumentsImpl (this, sel)));
# S5 r- N, B$ M3 v% b6 o" r } catch (Exception e) {5 ]8 ]: h3 w9 \4 J: {# O9 Z
e.printStackTrace (System.err);6 B) ^ w. t* E- T+ ]- @$ y1 \9 z
}
# b2 \) r% c% I * Q8 z4 e8 U- {+ \/ K$ z
syncUpdateOrder ();
1 j4 v( }4 y( @- m; N5 S3 R) ?3 W3 L8 ^% i2 ~ q
try {
6 ?& \* }0 G8 U" M: x+ Q modelActions.createActionTo$message
8 u& q8 e4 q' o$ Y (heat, new Selector (heat.getClass (), "updateLattice", false));
# O5 H; x3 V9 j( t) ^6 O } catch (Exception e) {1 D* P( L5 x2 `& j
System.err.println("Exception updateLattice: " + e.getMessage ());
, g* E$ k; w; {. i }
1 j5 }2 b& \ O1 c1 K0 y + t2 `1 F5 ^- D+ B5 i
// Then we create a schedule that executes the& h5 l2 W, t; |! s* z$ |$ r
// modelActions. modelActions is an ActionGroup, by itself it
7 Q7 P6 f4 ~- g v# B0 F // has no notion of time. In order to have it executed in
4 A Z/ p: ?. j& ?$ `1 i3 x. w // time, we create a Schedule that says to use the
4 l4 u" P1 H4 m7 U7 D* U // modelActions ActionGroup at particular times. This
# Y7 j! }" ?, t9 D // schedule has a repeat interval of 1, it will loop every8 o1 b$ D) ]1 m7 h/ T0 q/ a
// time step. The action is executed at time 0 relative to m) p3 a7 w3 T2 U, | X3 W
// the beginning of the loop.% @; e+ Q9 G+ f4 U q9 r
6 @3 ~2 R6 H3 W; n* H. n' E/ @$ t4 _+ R" G // This is a simple schedule, with only one action that is7 n2 z$ Y- h# A/ k1 o6 {) Q; a! D
// just repeated every time. See jmousetrap for more7 c, x( @3 X) w2 U
// complicated schedules.
c& F& |, }% }, \1 ]9 X ; |* u) ?1 l7 E' r1 z
modelSchedule = new ScheduleImpl (getZone (), 1);
( k2 {3 {4 M( ^1 V4 p) P. [ modelSchedule.at$createAction (0, modelActions);4 y9 \. k& d6 l6 A$ |
7 J$ `3 i8 J$ V return this;+ {8 d1 I$ l' `8 c7 K1 b4 p
} |