HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
$ Q7 }, E* _5 V2 Q8 s; B3 x* Q& X. N$ K: F+ Y3 I
public Object buildActions () {) D1 ?! Z8 Q- R. Y+ ]! b1 z
super.buildActions();9 n# |/ F2 g o& ^8 \( ^0 ^
( ~, J) S" T7 U( l& K
// Create the list of simulation actions. We put these in
2 } f ]/ I( j" M // an action group, because we want these actions to be
, h1 r E+ r- @ // executed in a specific order, but these steps should
, l, u( l% g$ c: V' Q/ Q // take no (simulated) time. The M(foo) means "The message
4 n2 T, ^3 p/ z, Z // called <foo>". You can send a message To a particular
" h0 d4 J1 H, r; R% O // object, or ForEach object in a collection.( z" } U+ f5 i" Q; T" I9 y! d8 ~
* y m( r; Z# T1 |3 R
// Note we update the heatspace in two phases: first run2 f2 Z2 P0 H6 X
// diffusion, then run "updateWorld" to actually enact the
L$ s# W9 I- H# ]* Y( g // changes the heatbugs have made. The ordering here is2 R# W, J- Y; M3 U) {
// significant!
7 S- v1 j1 @4 A7 E6 q0 V ( f# f+ R- W# l" v- z- {7 ?, ]/ l
// Note also, that with the additional
1 O! o) V Q. Z0 A, W; s3 |, ] // `randomizeHeatbugUpdateOrder' Boolean flag we can% y0 G4 u% F h, r
// randomize the order in which the bugs actually run) `/ y5 Y) g6 u+ B1 T
// their step rule. This has the effect of removing any
' R0 t' T& j+ S) k/ f( O3 h // systematic bias in the iteration throught the heatbug
- ]' q/ L& D2 G. Z; ~$ U9 m2 D // list from timestep to timestep( K, `3 M7 k) o. c/ y
) \! ]" m0 n# J5 w- V* q
// By default, all `createActionForEach' modelActions have- n8 F2 h0 K0 O- d2 C
// a default order of `Sequential', which means that the
8 D8 l8 `1 f/ `1 X+ @& `1 m // order of iteration through the `heatbugList' will be
7 H' h6 d2 B, @% N // identical (assuming the list order is not changed- V: o" F- P* f/ N, c
// indirectly by some other process).
6 K" O- z" O5 E# Z5 a. Q8 T $ F; u# m, c9 ^1 Q) J9 C! b8 O3 O; u- d
modelActions = new ActionGroupImpl (getZone ());
' T6 \- b! b: U1 |( @. l* D
9 G" U9 S2 |* Q3 K U try {6 X( r! V1 X, Y' z) X# x& _
modelActions.createActionTo$message1 Q: q& W8 p4 D) ^
(heat, new Selector (heat.getClass (), "stepRule", false));& Q# S3 E. ]) `& S
} catch (Exception e) {# j6 c0 \. R6 q2 t2 c6 _9 S
System.err.println ("Exception stepRule: " + e.getMessage ());
* G/ H. E3 v, _ ~3 x; g8 y }
2 h6 J2 B% X$ f# X+ \4 q5 v( h9 N3 v' O h
try {, g$ }) X# ?. v Y
Heatbug proto = (Heatbug) heatbugList.get (0);
% \- T) V2 e A$ h Selector sel =
; R; t7 r: M( t& w new Selector (proto.getClass (), "heatbugStep", false);
{ o% e) P' S o2 D7 S8 b( l ~ actionForEach =
" @- y* I7 ~+ I: e1 i modelActions.createFActionForEachHomogeneous$call
/ m: `1 S# Q; G; Z" M7 ? (heatbugList,
) }, h6 E2 _5 K, m6 |. u s new FCallImpl (this, proto, sel,/ q/ U3 |' a4 k- @: \1 k
new FArgumentsImpl (this, sel)));; ?1 l, T Z" ~: P. C+ l
} catch (Exception e) {9 r- E" Z: g" }/ Y* q5 J
e.printStackTrace (System.err);6 J0 z$ j) q6 C
}" p& u0 o- Z2 @6 c8 j/ I# C
% u/ i. ]3 [0 j1 ] syncUpdateOrder ();1 T- Y0 f* g2 x% l1 k; [1 F+ e
. x& S! i. O( s8 g) h0 I
try {
# l$ C, i- u6 @ modelActions.createActionTo$message
# ]) b8 N/ L7 a" V4 E9 f3 O (heat, new Selector (heat.getClass (), "updateLattice", false));
2 K3 ]$ D: u1 o* s } catch (Exception e) {4 y" V( D2 y1 R! Y. C7 ]; Q
System.err.println("Exception updateLattice: " + e.getMessage ());) Y C9 z5 A; ` Z* i# r# |
}
: t( _2 r6 G( A: S
0 g( c) F' M) j1 c // Then we create a schedule that executes the
+ N! e! G2 g+ S! j; E: ~ // modelActions. modelActions is an ActionGroup, by itself it& b d( [( j7 p, T! y" ]
// has no notion of time. In order to have it executed in
3 s* H! L: V/ t6 K, Y( j // time, we create a Schedule that says to use the/ q! Z% A" _; G
// modelActions ActionGroup at particular times. This1 X$ h$ y; q/ d- c: ?8 X
// schedule has a repeat interval of 1, it will loop every
) ^- C. S% |( M! l. p$ _ // time step. The action is executed at time 0 relative to1 ]& i" F+ B$ S: }* {- z
// the beginning of the loop.
/ O2 h- h! Z; h
( Q; P6 a h% n' F7 x" ]. w // This is a simple schedule, with only one action that is
7 ~% e" E9 B4 N: G$ s# p+ W( n // just repeated every time. See jmousetrap for more+ ?% A, X$ t$ m3 `: N/ l
// complicated schedules.0 h. B; }, q+ i) j1 }
3 O# F1 }0 T5 w+ K' W6 T0 h" ?6 ?$ D
modelSchedule = new ScheduleImpl (getZone (), 1);
" }8 t! P( i2 P/ O7 y% j modelSchedule.at$createAction (0, modelActions);& v: P ], n1 ^
6 |* s+ k h; h4 V
return this;
- Z: d$ D2 C7 N* v1 m9 O0 r } |