HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:( _. C; \4 {) l# C6 I# r: Z- m
- \3 ?: N% K! W! f7 e6 n: o" C
public Object buildActions () {, y+ U. a- F- g+ h4 l6 v* W: x
super.buildActions();7 c# V) y# }' b% A
7 d, g5 X! x4 c4 w# W5 e // Create the list of simulation actions. We put these in
: [! z r) \ b5 X1 Y2 F- @- q( ~ // an action group, because we want these actions to be( H F6 ?. v+ U. U4 P- g: E
// executed in a specific order, but these steps should9 O }+ ~. \0 g; ~
// take no (simulated) time. The M(foo) means "The message0 o* _9 H) v0 Z! ~' _
// called <foo>". You can send a message To a particular ]& P4 k( n5 n V" h; H
// object, or ForEach object in a collection.
& C3 X; ?; `- x
* C+ O) Q2 k6 y+ w; N1 [; G9 w6 _ // Note we update the heatspace in two phases: first run; e9 E# l8 j% {4 o. ?" M/ T
// diffusion, then run "updateWorld" to actually enact the* U* u& r, H4 F- N4 n' `8 d. w) V
// changes the heatbugs have made. The ordering here is
1 S& Z) R5 ^: ?8 T7 O& ]( i* C' m // significant!; d1 S5 \/ H7 g% ~* T3 W
1 q9 W* @, J. J, I) O1 {" B3 | // Note also, that with the additional: m$ R- E0 j0 |9 R" z
// `randomizeHeatbugUpdateOrder' Boolean flag we can
+ I: H5 n& U" g% B9 J2 h) g/ \ // randomize the order in which the bugs actually run/ L! {' J+ p& q
// their step rule. This has the effect of removing any$ a0 X! G0 e8 r- C& `/ @
// systematic bias in the iteration throught the heatbug
, o \6 J" W/ L2 A // list from timestep to timestep# s; i& `' g9 j! b2 y+ C
! P, \' I4 @" h/ N // By default, all `createActionForEach' modelActions have
2 o l/ o5 W6 H& o' z // a default order of `Sequential', which means that the/ ^8 d" |3 |5 u* X
// order of iteration through the `heatbugList' will be
0 i2 @2 v" M3 \' z+ ^! D) L // identical (assuming the list order is not changed7 u1 z6 @5 u4 p; M
// indirectly by some other process).
, M4 v6 r: N7 R# ]/ T
# m4 o9 T |( @3 i modelActions = new ActionGroupImpl (getZone ());7 v$ e" [+ N/ Z! x1 Y7 H+ M
. E: a- U- b# g5 Q ^1 E/ I! m try {
" |8 k- O- H- ^* X0 {- b modelActions.createActionTo$message. H3 A1 p3 H L
(heat, new Selector (heat.getClass (), "stepRule", false));
; F- {8 p0 w1 S } catch (Exception e) {2 n$ |: \7 Y' x( H0 [; p f
System.err.println ("Exception stepRule: " + e.getMessage ());
+ I, b$ s8 i+ V2 c2 I }0 K5 r7 q. J" l1 k7 i6 Y& X
% }( T/ a0 `: Y3 `1 I' z, i
try {* M4 g: H+ F5 k; z g2 _! w* m
Heatbug proto = (Heatbug) heatbugList.get (0);
1 f! m2 m( z8 {! P+ g6 d8 a* _ Selector sel =
9 q$ a. j' N) w6 v( H% I new Selector (proto.getClass (), "heatbugStep", false);
1 K$ C) ?6 M/ P3 P1 V2 l actionForEach =
" K( t5 G& W' p/ D4 I- \, H modelActions.createFActionForEachHomogeneous$call3 I) r1 S3 x8 `; ?3 _/ g4 E4 |0 H
(heatbugList,5 x6 N( y' k0 ?6 L
new FCallImpl (this, proto, sel,
- F& q1 C: W8 A& }* Q new FArgumentsImpl (this, sel)));
, T4 e0 n" T( }' r- | } catch (Exception e) {
) s5 M Q Z8 X e.printStackTrace (System.err);, t3 v L& N# P! o
}
+ i& \- e0 T+ l. b$ f8 N J ! A5 h& l% w) s
syncUpdateOrder ();
+ j, Z- y' e+ {$ V5 L6 b; z
# t: W9 M$ p2 \* x" `) X0 a. R try {
# j. T: Y- G) d modelActions.createActionTo$message
: O* w0 K8 H' i- V( E- i" o' s (heat, new Selector (heat.getClass (), "updateLattice", false));
! o3 Q" V+ O. `% v6 H' X$ b } catch (Exception e) {
2 i4 ~6 g, @, i6 S System.err.println("Exception updateLattice: " + e.getMessage ());
' Q a! d" r$ ^$ I( b }. U2 G e! ~. y1 d! q5 M7 p7 z0 v
v4 T+ U# O$ b5 [) q
// Then we create a schedule that executes the& q, N: j" s3 p x1 I
// modelActions. modelActions is an ActionGroup, by itself it
. O" J! d: b* w // has no notion of time. In order to have it executed in
5 ]3 c- E4 t9 P3 P' c+ V( B // time, we create a Schedule that says to use the `. y5 ?2 O: v S# W0 i
// modelActions ActionGroup at particular times. This8 M+ k5 E2 y$ w1 J9 z6 v
// schedule has a repeat interval of 1, it will loop every" M- g5 c5 u# J$ {+ Q
// time step. The action is executed at time 0 relative to
; ^* Y& x8 K$ L! T // the beginning of the loop.0 ?9 L3 N+ r5 l9 e4 D
+ M, J: ?0 t/ L // This is a simple schedule, with only one action that is
1 S% [/ R1 B3 f# D- ?" ?: @1 f // just repeated every time. See jmousetrap for more% j C4 Y# P$ V, c% y- [4 n7 t. Y, u# w! v
// complicated schedules.+ J; y5 T3 h& F$ B/ M4 e7 k
$ |5 r' @/ W! x: n1 ~( G2 S( l modelSchedule = new ScheduleImpl (getZone (), 1);
' p/ \6 l( M9 f: B modelSchedule.at$createAction (0, modelActions);& G* s/ ~: |6 q# ]1 Z1 v$ E
6 M, a& A& F7 @8 f; V. L
return this;
- P7 F5 h0 P. k' Y. h( Z } |