HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:6 ], a0 ]* A8 q+ |: z$ o: Z7 a2 M0 b
3 Q$ n" D! ]& z" b& Q) R, W7 P
public Object buildActions () {
+ ~) E+ c5 x# {# N# R: j( L super.buildActions();
1 o! P) [* Y% F) \3 L1 k7 O 3 P P4 q) g6 |' Y
// Create the list of simulation actions. We put these in
v' d' n: n3 _$ b( L' z // an action group, because we want these actions to be
: M5 }! N# j, `6 b1 t // executed in a specific order, but these steps should
8 w3 L1 s8 S; p# s2 r // take no (simulated) time. The M(foo) means "The message
8 H9 D8 f$ [0 e; f6 {- Y9 u // called <foo>". You can send a message To a particular
3 \9 X# q, h" O# t8 ? // object, or ForEach object in a collection.4 V, M. t' d2 M$ i
2 w. \6 g3 c& Q: V3 O' G0 d
// Note we update the heatspace in two phases: first run
6 B. ]. s5 M, f, ?. l // diffusion, then run "updateWorld" to actually enact the
. S2 i4 H- ^% ? // changes the heatbugs have made. The ordering here is" g3 t7 q. |) v: v
// significant!
$ y- W9 F2 b4 z! \2 B; e
: k+ z% M& Z/ n. [3 b L // Note also, that with the additional/ J/ C9 T5 c8 N0 B
// `randomizeHeatbugUpdateOrder' Boolean flag we can+ g- o" k; W9 @: Z9 b) t
// randomize the order in which the bugs actually run
* [* I- @) G/ X- B- O$ e // their step rule. This has the effect of removing any) E5 @' k2 E& E
// systematic bias in the iteration throught the heatbug
* K4 c; l2 B9 }: f // list from timestep to timestep: x$ G9 L O& L6 [; O; H: W) Q
$ g8 v2 q4 b8 H, B // By default, all `createActionForEach' modelActions have6 R5 n$ i B) x6 D" d
// a default order of `Sequential', which means that the
) u3 A* B0 k9 H& F# @! B7 c& O // order of iteration through the `heatbugList' will be
! }: z2 P" y" ? // identical (assuming the list order is not changed+ J) ~9 [% }/ m& K1 g/ A1 _
// indirectly by some other process).! i: C$ y/ Y0 w- F) h7 E1 a
9 [" f6 N! C, x$ [ modelActions = new ActionGroupImpl (getZone ());$ U$ z: ]4 Q& U9 d5 V
- [! |& o; o& P3 ^2 q# N% ]$ }8 e try {! h. x) l4 t2 ]: [
modelActions.createActionTo$message
0 X! X' b! k8 l" U& {: C (heat, new Selector (heat.getClass (), "stepRule", false));
/ M7 s8 n" A( {* j; M! B; o0 u } catch (Exception e) {# o9 h- s: y% Q" `7 r2 K
System.err.println ("Exception stepRule: " + e.getMessage ());
+ i( b' k9 Z `" D @' Q6 O A8 F" Q }
! z8 M" c1 y- b6 C! z3 e3 ~% L E3 z/ x" ~9 o! ]4 z
try {
8 S3 R0 x) i% I$ ~6 R/ A Heatbug proto = (Heatbug) heatbugList.get (0);+ ]! p+ \, d$ m6 e* R6 ^5 ]
Selector sel = / o" ?1 k# o3 ?# k; L9 p8 X
new Selector (proto.getClass (), "heatbugStep", false);( u- b1 v% L- |- v# O" F1 @
actionForEach =" y- z# y7 u, r1 \1 W* x
modelActions.createFActionForEachHomogeneous$call
& C, S. V t. L+ y x( U ` (heatbugList,
/ E/ ?) U% z" d# }. C( ~) _) P1 S! y new FCallImpl (this, proto, sel,* D- V/ _0 b& ]4 f9 E" k, v
new FArgumentsImpl (this, sel)));
^6 f3 d( e R) ~+ f2 A6 K3 [4 U } catch (Exception e) {
' n& }+ B1 |8 L) u( u4 k0 B e.printStackTrace (System.err);
8 B* N3 D) k& x2 } X4 U# J }
; `1 S: b/ ]/ R* \: Y* f & \4 B7 V. k3 W; S/ l
syncUpdateOrder ();
7 G. M7 k9 W, U4 _; ]: e5 p F7 \! K( c, C1 ?. E+ d, y
try {+ r9 @2 g2 ^2 t
modelActions.createActionTo$message 4 t3 K- i9 P% \
(heat, new Selector (heat.getClass (), "updateLattice", false));. k! X; s3 ]2 F" ]& A. c4 k
} catch (Exception e) {! ?! U0 t. h4 v
System.err.println("Exception updateLattice: " + e.getMessage ());
, M: N$ ]7 `8 Q7 h# R- O }
7 M, O- n7 D5 w
4 z7 b% }8 s- E2 x h4 b // Then we create a schedule that executes the/ w( D8 B: X. m4 M1 A4 X$ y2 w
// modelActions. modelActions is an ActionGroup, by itself it! {* y: {& ~& B7 K4 i
// has no notion of time. In order to have it executed in9 S( M' M! w) |9 v$ J/ |
// time, we create a Schedule that says to use the r, T( X9 V6 K& P6 t
// modelActions ActionGroup at particular times. This
2 o+ i: E p2 X // schedule has a repeat interval of 1, it will loop every
% i* V( H6 E! s) W, \ // time step. The action is executed at time 0 relative to* U! G8 `: ~# @6 D6 f
// the beginning of the loop.* f3 v" B8 o9 E8 Z( y: ?' K7 J
' c, V' P, \ p& m // This is a simple schedule, with only one action that is' e$ K" e& c5 ~! j+ c0 A/ h
// just repeated every time. See jmousetrap for more; y0 o+ H' [& _
// complicated schedules.
9 r& W) ~( ?+ d$ V1 [' u& h
# O( X8 ~4 e4 e( h( X' X; A, g modelSchedule = new ScheduleImpl (getZone (), 1);) m" |# ]0 v i! r" \2 c
modelSchedule.at$createAction (0, modelActions);% k2 ]1 N( l$ M& Z# F0 C1 {& F
/ g' q k/ K b return this;
! K( v$ n I* _- m% i6 O) K } |