HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:4 }1 }3 Z9 t& u! a, @% _& {
- `* W v8 n2 s* g7 W public Object buildActions () {. J$ | U4 d* Q7 {+ w* v
super.buildActions();
5 v& I6 H, ?1 d/ L6 D
+ M) }3 u* j. i3 r& [3 w // Create the list of simulation actions. We put these in0 C+ W5 _; S- u( \2 f6 s
// an action group, because we want these actions to be
% W3 I& h& G6 F7 J/ e2 O3 V& k // executed in a specific order, but these steps should
7 s+ q3 }7 p/ I1 v4 n5 i$ q* L$ U# E // take no (simulated) time. The M(foo) means "The message
" p8 k P/ c1 D& Q' L* `) a$ ` // called <foo>". You can send a message To a particular" O; e+ r- N1 F+ o Y& I
// object, or ForEach object in a collection.
6 Y T+ I5 t+ r
3 N8 M8 t# K1 x/ U/ H' V // Note we update the heatspace in two phases: first run
3 G; s& W0 P# X/ G // diffusion, then run "updateWorld" to actually enact the
; g8 m% p2 q# l: Q) [4 b // changes the heatbugs have made. The ordering here is; j9 L3 W/ M0 w; B# |
// significant!0 X: r, Z+ h, I7 r/ H6 t- b6 S/ S2 y
6 `1 T2 [: e% s. D
// Note also, that with the additional
, v b* u3 o) U6 @+ ?1 D // `randomizeHeatbugUpdateOrder' Boolean flag we can0 n3 O9 ?, B$ `' u# ?' @. Q
// randomize the order in which the bugs actually run, T* p7 t+ _2 `3 x4 S7 [4 D
// their step rule. This has the effect of removing any7 G9 K# ]7 P! _4 _# o4 }3 @
// systematic bias in the iteration throught the heatbug
! T, n; @3 J: R" C; S // list from timestep to timestep5 R! N4 N7 R5 M/ z U
4 Q7 r. {7 R0 {* b% \0 A8 j // By default, all `createActionForEach' modelActions have
* ^$ B$ B# y% O // a default order of `Sequential', which means that the$ n9 m8 X/ s" _5 U3 ^' Z
// order of iteration through the `heatbugList' will be
7 r6 N L0 J& w8 G: x& N // identical (assuming the list order is not changed
( ^- \: a" n* P // indirectly by some other process).
' Q- c* a3 x( g: k; m # o' [1 P# |2 r6 D K. x
modelActions = new ActionGroupImpl (getZone ());
6 [4 n! L3 Z t; |" m4 X. O: f+ g6 [: q
try {
# ~7 g$ `5 B5 O5 w. L modelActions.createActionTo$message
5 H- \' U+ N5 j (heat, new Selector (heat.getClass (), "stepRule", false));
, C3 i. v. h7 K% U3 y9 k } catch (Exception e) {* l; G" p# s0 Z4 O
System.err.println ("Exception stepRule: " + e.getMessage ());
: {* m) a6 g9 b, B: J }
2 D5 c. k2 U) ~9 S: O# x d# I# s
try {9 u ~4 f( B3 Z! J) r2 a, i
Heatbug proto = (Heatbug) heatbugList.get (0);1 X! K6 M* Y" M& D8 n
Selector sel =
" _* j. v4 [# [- q6 C0 e" z; o+ {3 j2 ` new Selector (proto.getClass (), "heatbugStep", false); X. L; ^; B) [$ i( I
actionForEach =4 _ f$ k1 ^/ e: X y$ w9 q
modelActions.createFActionForEachHomogeneous$call
1 g+ [* b" G, t3 } (heatbugList,
! D5 l$ m9 f% h3 C; f3 M4 ^( r new FCallImpl (this, proto, sel,8 ^7 L b; f' u- Q+ N
new FArgumentsImpl (this, sel)));
. f2 N! W0 G8 z& b9 s } catch (Exception e) {2 H7 O6 Q* W& J; F- |+ d
e.printStackTrace (System.err);
2 n! Y+ y6 D8 a0 t) J+ p5 A }+ m( S: P" M! S s
5 w8 r# R! L$ A8 O syncUpdateOrder ();4 V- V7 @ j' ]8 J' l' ^1 u J
2 }4 Q5 |2 |) @ C9 k% P% {# k
try {: Q, i: V' x( w2 Y% I9 h) G2 C( G
modelActions.createActionTo$message # D9 Q4 l$ ?, I# H. B
(heat, new Selector (heat.getClass (), "updateLattice", false));
8 o- N/ Q7 b' u# ?7 o+ G! X9 L } catch (Exception e) {0 f8 q& O( k8 i. w1 K+ o
System.err.println("Exception updateLattice: " + e.getMessage ());
. O' F- h( K% X/ A }
) f: v; @5 {' O) ]1 z / S. F/ | A8 f$ Q8 Q8 f
// Then we create a schedule that executes the
. B$ T2 `8 x) Z // modelActions. modelActions is an ActionGroup, by itself it. l, M# |' w6 I1 p* \, c4 g5 H
// has no notion of time. In order to have it executed in( I% j) f. R7 g, X, j: w9 L/ p
// time, we create a Schedule that says to use the
: l: ?8 Q- W0 g6 i3 p // modelActions ActionGroup at particular times. This
' c+ n3 _) `& {1 `; ^ v& P/ Y // schedule has a repeat interval of 1, it will loop every
* E- W" @# n( s/ R2 @( x0 N8 f // time step. The action is executed at time 0 relative to. l) B. I6 x/ k, ]" I8 z% \
// the beginning of the loop. h: g5 l# M- \9 g# G0 o
- X2 [- T- R8 R+ u
// This is a simple schedule, with only one action that is% _% S( M! |* v- m: [4 s! h
// just repeated every time. See jmousetrap for more, M& V& b0 i$ G' L: c
// complicated schedules.2 g! W3 c7 Y& P
5 l) ^4 G4 z. l# Q
modelSchedule = new ScheduleImpl (getZone (), 1);9 b0 I! g% q ]7 v p! Z+ [
modelSchedule.at$createAction (0, modelActions);
( L# A1 {1 b+ m) @( t+ d
9 y, e' O# N# \9 q' | return this;
3 @" t# ], z y } |