HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
; o4 U" z5 {& f4 _
* h8 V# {3 s# z% v public Object buildActions () {3 S& @- n5 ^$ ]
super.buildActions();4 d9 K G c9 z: c
' |1 u8 d, A9 z // Create the list of simulation actions. We put these in( z* {( ], l7 s! y4 E1 x
// an action group, because we want these actions to be
3 \+ g6 r& [9 W6 r // executed in a specific order, but these steps should
. c) l# o' F5 w0 g // take no (simulated) time. The M(foo) means "The message
. S$ R, ^4 {* |& W- {$ O // called <foo>". You can send a message To a particular
, I: U! l; \9 N" G0 k5 K // object, or ForEach object in a collection.% u! x3 F+ J. t6 ], }, x/ ?4 l0 a
" u/ O4 w$ Y9 {) U6 ?
// Note we update the heatspace in two phases: first run
& l0 m2 l8 {1 c& c // diffusion, then run "updateWorld" to actually enact the
% j9 A% y) Q6 R // changes the heatbugs have made. The ordering here is
1 U) ~: P' t. e$ H7 o$ b6 c. }* B1 j // significant!; I% i8 F# t0 q
i5 Z2 o4 X$ W
// Note also, that with the additional% k$ d* l% w7 q7 Y' j8 z0 m
// `randomizeHeatbugUpdateOrder' Boolean flag we can
. b+ x7 D# T2 E# R1 X // randomize the order in which the bugs actually run7 w' C+ }6 t* b6 r7 A9 w
// their step rule. This has the effect of removing any
6 L, a+ G. G- c5 q5 P // systematic bias in the iteration throught the heatbug
/ e5 Z- v- D4 R) u2 g0 Q2 E // list from timestep to timestep! j* C( O# U# k# w
: e( ?3 p* ^8 D3 ^: H
// By default, all `createActionForEach' modelActions have
8 a% F3 C. M8 S4 { // a default order of `Sequential', which means that the
$ D; i0 x4 |" }# k7 w8 A& c // order of iteration through the `heatbugList' will be4 b6 N# q8 ^$ d* x
// identical (assuming the list order is not changed1 n( d1 u% R* m+ _/ C2 C8 L
// indirectly by some other process).
z, e) v7 E1 F # {: s, A! s; |) X
modelActions = new ActionGroupImpl (getZone ());
p- {8 M: |8 t
+ L- d" |& s+ I- ~* C7 K- d6 y try {4 |' B; [" M. }" \- R- b
modelActions.createActionTo$message
3 R/ ~' k' z& L6 G (heat, new Selector (heat.getClass (), "stepRule", false));
/ k+ C8 f( K+ j7 Y7 Z+ j# m8 x } catch (Exception e) {$ k( q6 I" I( g
System.err.println ("Exception stepRule: " + e.getMessage ());
3 g$ w2 P: N0 k$ C3 X4 ^( |2 v }
3 A8 l) J* A z* g& i6 H9 ~) x4 g$ S4 e$ D" y9 E! m$ B* w: S
try {& c* ^; V5 x. n4 v
Heatbug proto = (Heatbug) heatbugList.get (0);# f3 l! p7 C+ }
Selector sel = 1 f1 `+ ]1 _* @
new Selector (proto.getClass (), "heatbugStep", false);* h4 K8 ]- w! x" Y" Z
actionForEach =
# b0 U$ @# }* [1 ^( i3 s& J modelActions.createFActionForEachHomogeneous$call
a" F# N0 c. L. R7 k (heatbugList,
0 e" p7 n$ G+ M new FCallImpl (this, proto, sel,
+ d! ?4 t- H5 ~' g0 b% q3 g3 l new FArgumentsImpl (this, sel)));
) ~. c. U* s1 T/ ~! I( g4 q } catch (Exception e) {
: p# }' D- x# Y6 T; O8 e2 K* h e.printStackTrace (System.err);" p: Z! X$ S9 Y: G; h4 r4 d
}
4 V& `7 {6 b+ d4 c 3 C: d: E A- w7 A* B e7 N; R
syncUpdateOrder ();
3 v5 C ` @ d5 P
: ^8 \5 p1 X6 H# V( Q" k try {6 E0 r' |+ I6 H+ C! U7 ]6 `; o( c; o
modelActions.createActionTo$message , ^" v+ o/ `1 D: L% [- S3 u
(heat, new Selector (heat.getClass (), "updateLattice", false));7 @0 G, |- E6 l9 }! c4 [5 X" d: N* f
} catch (Exception e) {6 l" ?6 T8 z* e
System.err.println("Exception updateLattice: " + e.getMessage ());6 j$ m- Z7 y: P3 R) j6 Q: Q# y X2 D
}
; `+ c8 g. s* m/ ? e - Y g' O: l# K# g
// Then we create a schedule that executes the
( Z5 b2 V# ~8 E: Q8 l: m9 S // modelActions. modelActions is an ActionGroup, by itself it2 M( S/ E) ~/ N: F9 d5 t
// has no notion of time. In order to have it executed in( T: t9 r: O7 Q
// time, we create a Schedule that says to use the5 v: c+ p3 X8 X7 Y+ K1 d) P6 [
// modelActions ActionGroup at particular times. This6 q; P, L% g! y& @
// schedule has a repeat interval of 1, it will loop every
7 G, `0 f) \; @( y) |7 c8 s // time step. The action is executed at time 0 relative to
. i, c* x. A. s; z // the beginning of the loop.& C* A, S3 r' C7 K3 U/ P3 u
" Q6 x- J+ y* {# k
// This is a simple schedule, with only one action that is
/ X0 K/ s+ T( r2 d- A% W$ C9 g$ V // just repeated every time. See jmousetrap for more9 L. Q. v! p3 f2 E8 f( }2 K7 ~* W
// complicated schedules.0 `- p7 A# z- [% U, \6 y6 R0 y
$ O" G$ x ?# ?$ ? modelSchedule = new ScheduleImpl (getZone (), 1);; c) d6 z1 V1 ~8 z1 [
modelSchedule.at$createAction (0, modelActions);
8 P4 J& B3 `; ~5 B% n: I! H$ G! t# k 0 \' q8 V7 I2 C5 R# i# Q- _
return this;
/ a$ r ]" L- @8 S9 O2 S' D } |