HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
w2 R; h7 ]9 ^' g6 ~9 C% @: _; y4 L) o9 y" s' |& M
public Object buildActions () {, k3 v) b2 l$ c9 Z: r3 t& G
super.buildActions();
. o$ E. I6 L2 z T* s ) a9 Z& g8 }9 ]% h
// Create the list of simulation actions. We put these in s$ E1 C) O6 \% i. i+ @. n
// an action group, because we want these actions to be% J, m9 y8 H4 h* D3 P( ~' N
// executed in a specific order, but these steps should% j. D3 C( H4 ^: _6 y6 L2 A
// take no (simulated) time. The M(foo) means "The message
x7 g% G) [( r) t! R // called <foo>". You can send a message To a particular
# U: |9 |$ l4 T: `; ~% U7 i // object, or ForEach object in a collection.* J) {% M+ N5 b- U7 T( p& x* W- V
% y* E) Y+ E+ o5 \0 w$ A1 g3 ~
// Note we update the heatspace in two phases: first run
, \. r+ Z9 @* D Y6 X% z" c# E // diffusion, then run "updateWorld" to actually enact the! Z" o `0 T4 x; e% x
// changes the heatbugs have made. The ordering here is, w5 N Z; P/ }: ~) Q
// significant!
. y6 O+ [4 O& Y5 W, k- t " c$ p( w: ^# y) W) g
// Note also, that with the additional
0 n9 U; C: Z/ s7 @7 [ // `randomizeHeatbugUpdateOrder' Boolean flag we can. P c1 I* U6 o( \+ i" @8 ~
// randomize the order in which the bugs actually run3 A: r' a0 I3 n2 {. ? m S
// their step rule. This has the effect of removing any
& V- `3 @5 b' E6 x: _ // systematic bias in the iteration throught the heatbug
6 j# a4 F& W: |2 W) G, c9 w // list from timestep to timestep
5 Z# W0 Y1 J7 L, x) T+ M8 \
/ V3 U# w0 W' E, e7 X% N. S3 u // By default, all `createActionForEach' modelActions have
9 k& s# q4 ^# F4 E% a% L& K // a default order of `Sequential', which means that the- B3 I1 [# l- a* I& h9 v
// order of iteration through the `heatbugList' will be& k- O) u) Z, r M
// identical (assuming the list order is not changed% _; ^. i1 o: r3 g+ _
// indirectly by some other process)., P6 m* U+ q1 n- C
9 L/ ^6 b7 b F5 s% a# w; Z
modelActions = new ActionGroupImpl (getZone ());
' i4 w5 w' d8 F! k* N8 X( c0 A- l w% \$ u! W
try {
! D7 |# R6 j, W0 x! ~0 t modelActions.createActionTo$message
* M/ G- x# h q+ }( h9 | (heat, new Selector (heat.getClass (), "stepRule", false));
: f" d o6 K3 b } catch (Exception e) {
7 m, }* ]. L: O# c' _7 \7 R1 N System.err.println ("Exception stepRule: " + e.getMessage ());6 w6 K @' P8 v. w2 n' V/ T1 T P
}
1 V9 @) c% ?2 Q! |/ u/ K
1 h% `% t: z3 c# ^$ M try {
2 }# {3 f. \8 {: X Heatbug proto = (Heatbug) heatbugList.get (0);
' O5 m! T" M0 }: s: C2 w& ~4 v Selector sel = 2 E/ V! C$ |6 {1 ^- F
new Selector (proto.getClass (), "heatbugStep", false);7 o& C- B0 Y* {- c
actionForEach =
, |, b, V8 b' Z1 ? V4 W+ z( f modelActions.createFActionForEachHomogeneous$call
5 e# |% s K& L! @- v+ `" c (heatbugList,& q" O4 Q4 ~; A' a9 o5 p
new FCallImpl (this, proto, sel,
( N ~# y) {& m2 ~5 @ new FArgumentsImpl (this, sel)));
# Z8 [, g% F- J } catch (Exception e) {
6 I& |# ~6 W/ i7 u: S e.printStackTrace (System.err);6 o* j% |; P6 k5 e
}( M- Z$ _4 ?! S1 p1 |, A5 Y
$ y s) w9 r! `1 ~& r1 N syncUpdateOrder ();
: g0 c8 |8 L( q4 ^
) c' I2 R# X- {, _7 u6 g6 Q4 w try {
9 ?& f, ?" z! l% S! b modelActions.createActionTo$message - G) I& I. {2 b6 r5 t
(heat, new Selector (heat.getClass (), "updateLattice", false));
) D+ G, R+ Y9 e7 b( y } catch (Exception e) {
6 s7 o0 A& m0 P2 f* v$ ^ System.err.println("Exception updateLattice: " + e.getMessage ());1 j0 |' t$ S: P5 V1 r( e2 I6 j
}
. g- U" T( o. \) {% \2 |" Q . Z B6 v' F$ b5 I" f% l
// Then we create a schedule that executes the
0 b( J$ T4 N% e! x2 l // modelActions. modelActions is an ActionGroup, by itself it% l/ L; X' ?7 d
// has no notion of time. In order to have it executed in
% c$ M# x% I, o( f; S+ b // time, we create a Schedule that says to use the
0 F. d; M1 J" O0 r& q/ } // modelActions ActionGroup at particular times. This( W4 v3 e1 D* x$ i
// schedule has a repeat interval of 1, it will loop every9 |9 o- Y% E% |# N* K0 ?' r2 J
// time step. The action is executed at time 0 relative to+ y# P8 ~( L/ L+ T( L
// the beginning of the loop.
0 r8 P6 k- |; x& r1 @
9 L+ r/ Z5 \0 D' e // This is a simple schedule, with only one action that is
3 `9 h8 M- @2 k+ Y( c c- p // just repeated every time. See jmousetrap for more
2 {- y0 w2 i( b // complicated schedules.9 P- i$ ~! y1 T6 r/ N5 [; C* S
( o6 {, p' W, w! M. W modelSchedule = new ScheduleImpl (getZone (), 1);
- A N. a2 G& o6 Y modelSchedule.at$createAction (0, modelActions);
% u& [8 F. f# ~0 D( K/ k9 w% V3 A " ]. v s! d7 R [, N" k r" Y
return this;
N2 {1 D- K2 s) ^# G- S( \ } |