HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
7 |& n% v9 n0 m
# {. j! D3 K+ O3 |( {2 R public Object buildActions () {* ^# ]7 ~+ ], K) U D5 d' Z# t
super.buildActions();
6 [, C0 a( W; Z" I
% g# N. V( |: C0 W8 G // Create the list of simulation actions. We put these in
5 Y; o2 a: k ?" K0 f // an action group, because we want these actions to be
! {: u' _8 \, B' z* y _ // executed in a specific order, but these steps should
' u* `& \! o+ X1 W8 e* h1 q5 ?4 [; }/ b // take no (simulated) time. The M(foo) means "The message/ N4 X0 b, x0 k1 z+ \
// called <foo>". You can send a message To a particular
" ~2 M1 a$ K& r5 y // object, or ForEach object in a collection.% c- y: i* j6 k2 B* c
) ]- F R1 g6 Q1 t9 o1 _ // Note we update the heatspace in two phases: first run
. _2 X0 W9 ^5 F0 V // diffusion, then run "updateWorld" to actually enact the3 P: i* {6 A' G4 X7 H1 H
// changes the heatbugs have made. The ordering here is! Q c3 j, S% |& i4 k/ z0 b$ L/ S" V1 j
// significant!
- J4 d4 F, s6 Z, |4 v
; i; |! V/ e C6 E! A // Note also, that with the additional
7 p: K: s, J; j# O // `randomizeHeatbugUpdateOrder' Boolean flag we can
; m0 l/ j* m% r& V2 U // randomize the order in which the bugs actually run
$ @3 P& b6 ]# Y# s% o4 @9 }; X // their step rule. This has the effect of removing any. f8 \6 z9 ~$ q' a4 A# p6 ?
// systematic bias in the iteration throught the heatbug0 \# B2 h7 B. Y$ w
// list from timestep to timestep* q" A5 h% j2 V, v' G
' t9 e" G K$ E- P9 i // By default, all `createActionForEach' modelActions have7 V, I/ C9 ~* P% Y
// a default order of `Sequential', which means that the' K6 b# P/ M# y' V# a0 i( @5 ?& R5 J2 r7 {
// order of iteration through the `heatbugList' will be
* m0 C1 D: v9 {8 M2 H // identical (assuming the list order is not changed; |5 N! ~5 {& a7 S1 _+ W
// indirectly by some other process).
/ C4 w G! N8 I: L% d' T 5 {" a' V1 l: @7 G8 A
modelActions = new ActionGroupImpl (getZone ());
1 n3 y: {: k! \& n) t ^ Y7 [( P
try {
* E! y% |$ T$ S+ o, z. q9 R# p modelActions.createActionTo$message/ l, L5 U+ D- a& j% [( t1 l
(heat, new Selector (heat.getClass (), "stepRule", false));
$ O7 H. d; z1 w K) e. M' a- c } catch (Exception e) {
2 R4 N3 Q- g% n# M v0 K, `$ h System.err.println ("Exception stepRule: " + e.getMessage ());
+ d' Q! s7 ]- W0 G$ c: b9 x7 ] }) e4 M( D/ Z; w. Q) b8 w7 S
% T; D6 f8 @- C7 F: ~+ K
try {- T {: Y u( ^
Heatbug proto = (Heatbug) heatbugList.get (0);5 X3 N& g- E% q I; {
Selector sel =
% O, y( H* }9 D new Selector (proto.getClass (), "heatbugStep", false);
. W3 x( O& v* K- m7 E, u actionForEach =
' `: ~' x$ V$ K" X) ^/ R" x& O modelActions.createFActionForEachHomogeneous$call
( J4 g2 j; L4 R (heatbugList,
; s5 e3 x \8 d# ^! `6 k' X( W0 G) A7 a new FCallImpl (this, proto, sel,+ z) o5 u. u* \: q" j
new FArgumentsImpl (this, sel)));4 n, x+ m$ I: k2 i2 Z4 w
} catch (Exception e) {0 Q* ~+ k- u' q; c/ y
e.printStackTrace (System.err);
( p( ?+ z1 h8 A- i( A1 H- ? }
% h) ?: m" z2 N1 w
" B( r7 H, x2 Y, w syncUpdateOrder ();% K* |) i& E* c5 P8 j# t; p7 J8 a* B0 P
& N( V o; @' U try {
! E. Z! Y0 h; \1 @ modelActions.createActionTo$message
; }$ I# H# H# M (heat, new Selector (heat.getClass (), "updateLattice", false));) l7 \) M0 `; W* s
} catch (Exception e) {9 o, }8 ]/ |% b" g8 f
System.err.println("Exception updateLattice: " + e.getMessage ());
5 w# _8 f/ s8 U$ E, m }+ t- s9 r# c% g# I# ^5 J! | ^
3 R/ ]& W6 ] m // Then we create a schedule that executes the
: H$ N% f1 m! y! h, d- k // modelActions. modelActions is an ActionGroup, by itself it
- T' y( N: l: `/ ? // has no notion of time. In order to have it executed in
; @; h0 m4 N) C$ i! f" o // time, we create a Schedule that says to use the
1 U* a$ }; e% v% x5 q+ \' S( T( E! T // modelActions ActionGroup at particular times. This! f' _) D" p8 O7 e1 x( X; M+ i8 C
// schedule has a repeat interval of 1, it will loop every
, |" o9 O: P4 S7 g: ?: k // time step. The action is executed at time 0 relative to$ j/ D4 w' Q, s2 c+ y2 C& d0 t% @
// the beginning of the loop.0 F$ R1 P& U* M6 V' W7 ?
& a+ T- D. o. W& r; w( V d3 o7 V // This is a simple schedule, with only one action that is
# P& H7 T6 G' c, ]* L // just repeated every time. See jmousetrap for more
# s3 A& \& p6 _; A. d // complicated schedules.3 v. d% l" V4 \
# t! X! H3 s8 c5 A
modelSchedule = new ScheduleImpl (getZone (), 1);/ w6 o) V( j% ]$ z$ G
modelSchedule.at$createAction (0, modelActions);
% _4 f9 S3 H- e2 b2 G/ P7 Q ) n8 E8 d# M2 V+ k/ W
return this;$ A/ g, ^+ ]- u9 v G
} |