HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
1 S2 F; e; L+ Q3 n4 m, f6 N! H X) D1 H* K2 `2 F
public Object buildActions () {
6 _7 a" B, w+ N+ J( S super.buildActions();0 |3 a( W' m* I! q. @
0 ]) ?1 \. O3 `! d! M. |' O4 \ // Create the list of simulation actions. We put these in
" k% x) J1 Z! M5 r // an action group, because we want these actions to be
5 k" i; f) N! ], Q5 Y // executed in a specific order, but these steps should
4 _6 f4 \ J0 r0 @+ K // take no (simulated) time. The M(foo) means "The message
- v6 z- F( f" I, `) h. o1 _ // called <foo>". You can send a message To a particular+ F% m4 j1 z% ]8 Z) D; `1 {
// object, or ForEach object in a collection.
, A' O$ t0 q' E- l" O% \; ?) a % z2 B/ p+ _% V o' e
// Note we update the heatspace in two phases: first run
9 i! m9 ]% {4 ]9 y' M // diffusion, then run "updateWorld" to actually enact the; h' L9 S# Q5 }5 ^3 @4 Z
// changes the heatbugs have made. The ordering here is, a8 Q* o: A, F2 ]7 P) @
// significant!
, |( s( Q& p0 A+ }. @ 8 F X8 Z/ l7 I
// Note also, that with the additional. r6 s; d/ l6 q' y6 {; h4 n
// `randomizeHeatbugUpdateOrder' Boolean flag we can
z+ e v# `. t: o. i0 E0 W% { // randomize the order in which the bugs actually run
* i! f1 h& C5 A" c. A // their step rule. This has the effect of removing any' d" R8 V3 X+ h
// systematic bias in the iteration throught the heatbug3 \' z' I2 q3 P* V' P, x
// list from timestep to timestep0 P* z0 u8 }+ k, K' M2 g9 `" X
B. O+ Z8 k* M8 `7 Y8 X
// By default, all `createActionForEach' modelActions have
7 Y5 c2 E$ n: O" R2 v; T6 g // a default order of `Sequential', which means that the8 h+ n$ I! ?+ b, c5 |5 ^
// order of iteration through the `heatbugList' will be2 S8 H5 A( i- o7 d1 y
// identical (assuming the list order is not changed8 r2 `9 U3 ~" m$ F( j4 B9 D
// indirectly by some other process).) y, q1 o# K' e# e
. U& N- _+ f# J* M: ]0 b- U% B P modelActions = new ActionGroupImpl (getZone ());
3 x" A+ Y' k3 P$ W$ i6 R0 u9 J6 ?6 Q1 k; o k
try {
" |1 A! S% z' I8 A( B) G modelActions.createActionTo$message7 R- D& M- ~1 W2 o; L5 L
(heat, new Selector (heat.getClass (), "stepRule", false));
]0 _, X ^+ M/ T- }# D } catch (Exception e) {
4 \7 y- J; r9 o; n System.err.println ("Exception stepRule: " + e.getMessage ());
- b8 ~+ L& v2 r& y1 M }
! i L7 O! q4 T' o
" A6 B1 J5 C9 N7 Y- J3 ]; h) R try {9 H& g! S* [# y2 D$ ~
Heatbug proto = (Heatbug) heatbugList.get (0);
) q R- }! H. l* F& ~8 _- s Selector sel =
( e/ W8 w+ V* \5 O+ Q, D" S new Selector (proto.getClass (), "heatbugStep", false);: r2 E+ p2 s! M: v* ?
actionForEach =
: n3 r! Z) ^( y ~9 J6 k: U modelActions.createFActionForEachHomogeneous$call: [1 L5 i8 N4 f
(heatbugList,
1 E: C& d7 c) o7 J( u; D0 j* ^ new FCallImpl (this, proto, sel,
% M6 u: J2 U% W$ L+ C; R5 Z/ { new FArgumentsImpl (this, sel)));
$ r x5 S$ {" `8 c# R; f7 R } catch (Exception e) {7 H6 z% N7 H9 o
e.printStackTrace (System.err);, `: x$ l# p7 e' Q& x+ ~( S# Z
}! {1 ~5 M) l' q- M
" }0 h C) @% m* f$ ~( w$ [& w syncUpdateOrder ();
/ x3 n. s7 G3 u$ F6 g! y
- i/ M8 P- D) |& l# T try {$ O3 C7 W; [! T- a' J# M& K# g2 q
modelActions.createActionTo$message / ]" l6 {4 i; [* m
(heat, new Selector (heat.getClass (), "updateLattice", false));
% p- ]8 e: a z9 @8 A } catch (Exception e) {$ o! ]; T/ a5 H+ f3 W
System.err.println("Exception updateLattice: " + e.getMessage ());( l9 [ ?+ W' B: G6 w9 G
}
* E1 w" ?0 m( I! i I
3 U, [; K2 m, g2 [4 Q8 u7 e // Then we create a schedule that executes the, b6 l$ O' C9 u
// modelActions. modelActions is an ActionGroup, by itself it
+ }4 T2 j4 a5 }0 s // has no notion of time. In order to have it executed in
1 d" F+ Q( g% t2 F; b% t( k // time, we create a Schedule that says to use the9 Y& x$ ^+ @' m; b. O* h; E( D% u
// modelActions ActionGroup at particular times. This
4 @# ^ N! i. N6 l% Z // schedule has a repeat interval of 1, it will loop every8 {+ E; C4 v3 G2 c% q: ?1 ]
// time step. The action is executed at time 0 relative to! w2 m0 a: ^' s% C1 Q- \
// the beginning of the loop.
+ ^9 r% y* G) v& G' F8 N# _: E2 R- Q/ w8 t. Q9 I" X! E
// This is a simple schedule, with only one action that is+ e7 Q9 [7 q* M) P! W1 q3 @$ o8 J
// just repeated every time. See jmousetrap for more
1 l, v% h4 O- J9 U8 l# \# B // complicated schedules.
/ G: x2 @. I1 v" q # ~, }& \4 @9 d1 k' I @. Y3 n) |
modelSchedule = new ScheduleImpl (getZone (), 1);" X6 E" ^2 d/ H* y9 e% ^- ~' d9 k
modelSchedule.at$createAction (0, modelActions);6 t/ I" t: a7 [6 X
: B6 j: Q) Z- U0 t
return this;
" C' l# R# p8 b8 }8 F1 c6 l } |