HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
. `: v7 c8 t9 ~* J1 q0 ]+ w7 t# d1 H% w
public Object buildActions () {& b V5 T: B2 t. `
super.buildActions();
$ _5 `/ S9 Z' M5 F' f2 E- r/ V
K% f' q. u9 z // Create the list of simulation actions. We put these in X0 |- P+ O" N" Z( G
// an action group, because we want these actions to be
4 f7 X6 l6 L ]: }. [6 Z7 q) R // executed in a specific order, but these steps should
( Y3 y+ ~0 M6 F/ i1 Z! x // take no (simulated) time. The M(foo) means "The message% e4 u' _! L5 l+ r/ O% M0 f) i
// called <foo>". You can send a message To a particular" n" L, W" s k/ B i0 q8 w4 Y
// object, or ForEach object in a collection.+ P q1 p8 s4 H: T2 C) l1 \
: I* S) O' e9 t+ {! l
// Note we update the heatspace in two phases: first run
! x" }$ K# S, e( h // diffusion, then run "updateWorld" to actually enact the
0 w! `* ?1 ^( s+ [ // changes the heatbugs have made. The ordering here is
* N9 w' e: ?+ ~# p // significant!
. r/ b m8 |. Q+ h; P2 W6 _% s# G * s: `& v$ D: c8 V I! Q6 L2 u
// Note also, that with the additional$ \2 e. n- Q7 @" ?5 @
// `randomizeHeatbugUpdateOrder' Boolean flag we can, t7 z) n& w' n0 t
// randomize the order in which the bugs actually run, U6 U- X& Z0 G+ K4 O
// their step rule. This has the effect of removing any; ~0 F/ M/ L/ a# r& V
// systematic bias in the iteration throught the heatbug
$ ?$ Q8 Q, F' S4 g // list from timestep to timestep
( n2 H: l1 [: n7 I1 k6 S7 \9 }6 G + m) l7 V) O1 Q
// By default, all `createActionForEach' modelActions have
0 L! D/ u3 q- P' p // a default order of `Sequential', which means that the
( E" Z9 R; l! k7 t5 [9 D // order of iteration through the `heatbugList' will be
: V5 k9 B/ {' w" z9 f" d // identical (assuming the list order is not changed
3 T/ P* ?& \( M, ~ // indirectly by some other process).
y9 H+ E4 L5 ~ ( x1 x/ Z7 d0 {" e
modelActions = new ActionGroupImpl (getZone ());
3 [, Z# I e( k2 e& v6 ?; y1 y P: T
try {* e1 K: I$ B/ M! A \' r
modelActions.createActionTo$message
0 F& D6 c7 S. q0 H (heat, new Selector (heat.getClass (), "stepRule", false));
+ [3 l2 ~# U- Z2 U } catch (Exception e) {) Q! P, P! A" q
System.err.println ("Exception stepRule: " + e.getMessage ());
. L& R; @8 U A }8 Q! l' i# b. ~0 O0 T- m% P
3 W( y$ y: Y( d' M2 e* m5 e try {7 a6 y& [! W& O0 p1 x9 }' W
Heatbug proto = (Heatbug) heatbugList.get (0);
4 [! Z' c7 m' c( y* h% ] Selector sel = ' d- E5 Q. n }0 r2 _( o6 v
new Selector (proto.getClass (), "heatbugStep", false);* }& _, b% H# V2 J e6 c
actionForEach =
; q0 O0 h- p8 i% I" y1 y modelActions.createFActionForEachHomogeneous$call- p& V' e4 d% m$ S
(heatbugList,
" s- C& H) V9 k# r new FCallImpl (this, proto, sel,
# y9 [& p2 i, `: f new FArgumentsImpl (this, sel)));& g6 K1 @ n% i8 c
} catch (Exception e) {2 `% x/ I) l5 G/ X1 a
e.printStackTrace (System.err);
# o9 E- z' }. V$ J }
) m$ V: c2 _9 R7 M4 N
5 z9 F5 G7 U) A f syncUpdateOrder ();0 [7 e& V) V4 Q: n j8 f
3 [* }7 v* a6 x/ [8 P+ ^ try {
! E6 u5 ~* U5 g ?9 a8 t modelActions.createActionTo$message
$ I+ \! W4 m" j5 s- R( c/ T' [ (heat, new Selector (heat.getClass (), "updateLattice", false));
- d5 M# P8 ?9 `; O; V9 F } catch (Exception e) {
- S9 Z6 w1 h: Z% I3 m System.err.println("Exception updateLattice: " + e.getMessage ());
/ M. o! {7 C& i7 T( ]0 o }0 I' q5 u" _* ~0 }5 I; S$ u8 D: L
3 z4 P$ ]$ j1 G9 ]2 L- x. z // Then we create a schedule that executes the# S. v2 X, z0 v5 l1 C7 P6 P
// modelActions. modelActions is an ActionGroup, by itself it6 G( E* o1 b4 T/ q8 F& x- X) |8 P. f
// has no notion of time. In order to have it executed in
' X8 \7 ^: [4 G // time, we create a Schedule that says to use the
6 a. ], [* k9 B f // modelActions ActionGroup at particular times. This
7 O% B' h7 }3 k. G5 ]2 f/ v: T1 a // schedule has a repeat interval of 1, it will loop every k2 S, f9 E" |& W( \
// time step. The action is executed at time 0 relative to6 [/ \/ P& Z n9 G6 I) r8 r$ K
// the beginning of the loop.
/ ]0 m- X4 z- T. }
3 N. H6 r* m1 o, G$ _ // This is a simple schedule, with only one action that is
+ @1 C- t6 ?! K6 R6 B // just repeated every time. See jmousetrap for more
* s8 ?- ^/ }- v! y4 l$ g" j // complicated schedules.: l: L' I# s s# N
! f! Z5 J# {3 @# u+ Y
modelSchedule = new ScheduleImpl (getZone (), 1);
) d& W/ k% s* Z4 r4 X9 | l modelSchedule.at$createAction (0, modelActions);
% d- @0 j6 q, @ l; s 0 u9 Q: ~* k6 d3 v' W" z
return this;
3 k8 n k0 e4 b( f } |