HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:# s, ?3 Z M5 `: {# l0 d) b1 N
; U, ]0 M8 [$ _$ H public Object buildActions () {
' t" _: `; H* C: c0 R super.buildActions();* a; Y# Q% |6 r0 k# s# m; o) `
$ k. L$ W2 ]/ s- R# i# A" k // Create the list of simulation actions. We put these in7 a2 _, {! D. N; I5 e
// an action group, because we want these actions to be, A3 V* u% U( {6 R
// executed in a specific order, but these steps should% R3 l5 c8 L% q4 c/ l# W9 w
// take no (simulated) time. The M(foo) means "The message
5 V- r; m* |4 ], o // called <foo>". You can send a message To a particular
* W* d+ B8 N# @6 z // object, or ForEach object in a collection.5 y& q; C0 q9 |3 z O
; W* ~5 N; L6 q# @7 \
// Note we update the heatspace in two phases: first run
/ k" ~5 s, x5 T9 W+ z7 [# I: G1 _ // diffusion, then run "updateWorld" to actually enact the4 X7 H+ u2 Q2 \3 |
// changes the heatbugs have made. The ordering here is+ z6 y" r& Z6 z4 n1 T
// significant!7 {1 g m+ c/ @1 _9 R% I
: R" E2 w7 E1 }# Y& D% n
// Note also, that with the additional* l8 s0 q6 f7 b% X9 N' [
// `randomizeHeatbugUpdateOrder' Boolean flag we can
# T1 z. X2 n7 k' |. V; I! a2 ?$ F5 Z7 W // randomize the order in which the bugs actually run' ?! \5 l/ w7 W' R
// their step rule. This has the effect of removing any& C9 W3 F6 ?6 K3 Y) y, U! V5 l
// systematic bias in the iteration throught the heatbug
7 y5 y% h" u8 s // list from timestep to timestep
8 L# Y, P- M$ r4 M
. ?/ L7 a3 A' F% ] // By default, all `createActionForEach' modelActions have2 ^7 c0 V2 n G+ V
// a default order of `Sequential', which means that the
, a6 y5 ?: ?5 w y7 r // order of iteration through the `heatbugList' will be+ i7 J+ e# H1 h- V) g9 v
// identical (assuming the list order is not changed
/ @3 P: j! ~9 e // indirectly by some other process).
! Q0 M' v# O4 A6 t* e & g0 {% X, s; E( L. X, h
modelActions = new ActionGroupImpl (getZone ());
5 O! d! c. |5 ^
7 \* F8 j! |7 q; K& W/ m! K5 Y) a try {# |% C3 U# v: Z( F/ `! F
modelActions.createActionTo$message0 c/ B) e, u! v( e9 q
(heat, new Selector (heat.getClass (), "stepRule", false));
: @+ r, s/ ]/ l1 [. a& `' r$ _ } catch (Exception e) {
/ d) ^5 K+ S( L3 I9 H) Y System.err.println ("Exception stepRule: " + e.getMessage ());: N+ t" Q$ e8 v& W) M" @
}5 v1 V j/ [, r. d [: y1 X
4 J& D5 k j) e( D V try {
! U0 j" r2 `4 d7 D: Z/ t Heatbug proto = (Heatbug) heatbugList.get (0);
8 }( J- K$ @ v! Q2 U4 u Selector sel =
4 q7 B) w# n* a& u new Selector (proto.getClass (), "heatbugStep", false);% B3 f0 S4 V& F$ g) y
actionForEach =
% {, f3 c+ v" X" m' I5 a! h3 E modelActions.createFActionForEachHomogeneous$call8 d, a0 n( Y: @* Y1 U
(heatbugList,
( J$ i) f; @ {, [' `3 c( O new FCallImpl (this, proto, sel,( y6 I4 P6 @- M
new FArgumentsImpl (this, sel)));
' e" u1 a9 D1 Q% a( X& M. b3 Q } catch (Exception e) {
% `( l3 Z8 H6 P% V e.printStackTrace (System.err);
7 V" @) y' s9 e3 {% G }' p0 n; X5 p6 E" K
% J8 _7 `( s1 t syncUpdateOrder ();
8 W7 Q' h4 l" J4 b
" ~4 n, t3 X% ~- { try {6 {# o7 L' n0 l/ ^$ k
modelActions.createActionTo$message
' H6 s3 @3 P8 ^' b. }* [: ? (heat, new Selector (heat.getClass (), "updateLattice", false));
i6 L' a8 t+ M4 S+ r+ a* `, | } catch (Exception e) {
. v# d4 |+ G" s% w System.err.println("Exception updateLattice: " + e.getMessage ());9 a5 `" N$ F3 |& K9 W. q) w
}/ a& C: k/ X5 l! R9 i7 O4 Z" m" m
" Y* \8 c" P5 _) z' e
// Then we create a schedule that executes the
, ]8 W" H9 \3 ?( v3 I% ?3 A. a# L // modelActions. modelActions is an ActionGroup, by itself it2 q$ ~+ h6 W9 Q2 q. a
// has no notion of time. In order to have it executed in
7 Z" n# \' Z4 Q4 a' }0 L7 e/ ~2 t x // time, we create a Schedule that says to use the
/ _ K6 l% L$ y: S3 |6 O // modelActions ActionGroup at particular times. This: O9 J( V$ a3 M3 s# K
// schedule has a repeat interval of 1, it will loop every3 w- G7 X( J7 Y
// time step. The action is executed at time 0 relative to0 f, f* W' }. Y' q+ U
// the beginning of the loop.
7 s( b* m: c, N7 A4 u5 e
' A. ~, v: d9 `3 I( N // This is a simple schedule, with only one action that is/ p; J; {7 u, R8 ^7 j3 a( x2 A
// just repeated every time. See jmousetrap for more
1 ~9 Q# u, T+ E1 K2 J) n, y // complicated schedules.6 h6 M/ _3 R8 k) C
1 o" q9 e, A) C+ s modelSchedule = new ScheduleImpl (getZone (), 1);
3 s1 ~, B3 r. [ modelSchedule.at$createAction (0, modelActions);
) O7 \* P5 Q" v5 |% B( a- L - u# s+ E( `0 V: r
return this;. v% v7 l' U2 k! `: g; n
} |