HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
0 ]# K8 S5 P0 V; y" R" e( w3 D/ y1 d) w+ \. C% D6 h* m8 ^$ r0 J
public Object buildActions () {
& \! @/ I/ w2 g$ m super.buildActions();
+ b- f% v- C: F: g% a* I6 V/ T, [3 e$ T 2 Z2 h9 J& f0 a" e: `
// Create the list of simulation actions. We put these in
3 f# v5 |2 F& | // an action group, because we want these actions to be# c4 Q N9 ~+ y
// executed in a specific order, but these steps should
* M8 N. ~3 {; w$ [ // take no (simulated) time. The M(foo) means "The message
# U1 W% u& J1 P7 c( ~ // called <foo>". You can send a message To a particular
8 Y' X! F8 p9 Q // object, or ForEach object in a collection.* v+ m8 ~( u) `5 X) A' w
3 ?2 G' L$ @' y
// Note we update the heatspace in two phases: first run) ?2 I( B% S8 q- Z4 Y/ o- f
// diffusion, then run "updateWorld" to actually enact the. ~$ y* U) D0 f. }
// changes the heatbugs have made. The ordering here is) ~0 x/ S1 s1 ]9 E, d! s! f
// significant!" G3 ~0 a% i$ a: T
" V; ~) C+ V, e1 g! `% K // Note also, that with the additional
3 \7 }7 t" ~; e- {! N; K$ d // `randomizeHeatbugUpdateOrder' Boolean flag we can
2 @$ `9 d2 Q3 O" A6 [9 b- h7 x // randomize the order in which the bugs actually run! ~" ]2 B; p: D
// their step rule. This has the effect of removing any/ Q T* V" Y) `* a$ c& `
// systematic bias in the iteration throught the heatbug
: b1 o8 Z5 r! t% g! J // list from timestep to timestep, N+ {4 x$ D& X, t4 \
4 \6 j+ q7 r) ?. P- m, R
// By default, all `createActionForEach' modelActions have
4 K) {2 m+ Z+ z. A6 f9 A1 W) | // a default order of `Sequential', which means that the
& @6 ?3 O4 f, @ // order of iteration through the `heatbugList' will be) X6 s' g1 q3 h" `! S
// identical (assuming the list order is not changed& b- d2 s8 Z, J, m2 Y& E# Y2 V
// indirectly by some other process).( Y8 f- w S6 G
- q8 x+ L5 V3 b D1 S* h modelActions = new ActionGroupImpl (getZone ());8 M1 |7 e1 L' g7 P& `: z8 l' d
' _. z" \/ y' _
try {1 T6 ^2 y5 }2 \% D2 x5 r
modelActions.createActionTo$message
, D' Q" D9 J, ~5 z9 t; }& T( G (heat, new Selector (heat.getClass (), "stepRule", false));0 S. y" ~/ U, o9 S- \& u4 |
} catch (Exception e) {% U6 K- n& q# ]( h6 K- w7 z
System.err.println ("Exception stepRule: " + e.getMessage ());0 o/ A( n8 `2 B. y: T p# U
}
# H6 O( J$ F3 h1 R6 S
1 ~( U7 T, x' I0 `" \. d j7 w try {; Q: a7 f% _+ ]! w0 x3 }! f# t
Heatbug proto = (Heatbug) heatbugList.get (0);: \# S) I3 B) k# N) c: `+ j
Selector sel = - @3 t6 \# u* Q, R8 _
new Selector (proto.getClass (), "heatbugStep", false);
0 `/ O; s, X4 @0 Y; I actionForEach =
( F% [+ X0 p& }, K9 N modelActions.createFActionForEachHomogeneous$call
# A7 X2 b3 C' d( ?( T H (heatbugList,3 @ L5 k: N, `4 S+ w+ T% A/ H+ K6 s
new FCallImpl (this, proto, sel,+ p% i1 j5 Q6 l# j( ]. d: y
new FArgumentsImpl (this, sel))); v/ J0 O" a1 f" G
} catch (Exception e) {
4 n! f( Z3 o+ w& g: h1 y$ X e.printStackTrace (System.err);
% G$ F n0 O# z: _8 z0 I: ] }# s7 j) X0 x' T1 i, f
) {6 C9 c; t2 z syncUpdateOrder ();4 _$ M5 |/ p- J \0 V" H
9 T4 M' V7 O2 V. S, O" F3 R
try {
( C" ]( b- |" Z. ^- v% u modelActions.createActionTo$message
* G" O$ O6 I2 m; c; q4 E6 | (heat, new Selector (heat.getClass (), "updateLattice", false));2 e8 u9 T# Z' }" ?# T$ F
} catch (Exception e) {
) R7 K4 d! ]; m: D" Z System.err.println("Exception updateLattice: " + e.getMessage ());9 K" N4 m5 u7 I- n; }
}
+ h" z4 n. C% g
$ U8 U7 a2 f1 m // Then we create a schedule that executes the
- X5 N ~% C T // modelActions. modelActions is an ActionGroup, by itself it# T4 q) h1 O4 o, f0 a8 `5 T
// has no notion of time. In order to have it executed in3 h, h) u9 E; Q( U5 o2 w% |& L
// time, we create a Schedule that says to use the
' C! L# l' ]3 N/ n" K8 J5 L" g // modelActions ActionGroup at particular times. This
# a9 _8 p; D" ?2 {! V+ _% M // schedule has a repeat interval of 1, it will loop every" N5 ~8 T# r: ~# f% p$ L
// time step. The action is executed at time 0 relative to! A) |0 d2 O% Q2 z. e. ^1 e
// the beginning of the loop.
( k* {! ^6 b2 A' _, _
( e' l3 F. j% ]4 U' l* M- L // This is a simple schedule, with only one action that is
& o4 j/ U( f- Q, y& s( L) I // just repeated every time. See jmousetrap for more' F6 s+ D& U+ {3 ^& s
// complicated schedules.2 ^. n9 E0 H* A% F
' ~' |0 y- a' p& c" U
modelSchedule = new ScheduleImpl (getZone (), 1);
( K ~7 t' f$ h2 w6 t m/ V modelSchedule.at$createAction (0, modelActions);
( A( k4 z6 ~# g: J - o" E q t) o! K8 ^: v2 R$ ?
return this;* V ^6 r, B+ m$ K
} |