HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
7 i! v- E0 i1 K# O4 N$ {7 O7 Y/ e, O' Z+ s+ _
public Object buildActions () {
. h: x X; O8 F% @ super.buildActions();8 T" y* ~ Z1 J+ e6 E) ?2 l
6 W# U* w2 z r% ]& ]& Z& z
// Create the list of simulation actions. We put these in
( S# t! r$ Q [ // an action group, because we want these actions to be
1 l6 u/ i' `. O/ g/ B' h1 o( f // executed in a specific order, but these steps should9 Y/ J/ w5 l! @2 Q
// take no (simulated) time. The M(foo) means "The message( z2 M$ M+ X% B2 {
// called <foo>". You can send a message To a particular
( G; N \/ q4 g$ e // object, or ForEach object in a collection.
* k, y6 S6 N$ E* }- T7 p! r: _ ) g& j, c B4 D4 @
// Note we update the heatspace in two phases: first run
/ O/ _9 W; N2 R7 @, t // diffusion, then run "updateWorld" to actually enact the
5 c4 |( l4 N0 B9 D- } // changes the heatbugs have made. The ordering here is
# x9 t: Q) ^! v! a // significant!4 W8 O8 j5 Z6 {+ I/ Z- ^& ?
" E" m; |1 U9 D0 c* v% z/ U
// Note also, that with the additional! f/ `. i; C, H* n: g
// `randomizeHeatbugUpdateOrder' Boolean flag we can9 k$ n4 Y, s0 {
// randomize the order in which the bugs actually run
9 s& I8 H9 T* _& [" K/ L // their step rule. This has the effect of removing any. W1 y& F' X9 O& G7 C1 I* l
// systematic bias in the iteration throught the heatbug
) u1 A" r6 S+ C& {5 I // list from timestep to timestep+ h% h4 m% d. ?: q
& u8 N- Q4 @1 {0 N
// By default, all `createActionForEach' modelActions have- ^* Q7 x7 ]) u x, _. \6 a+ R8 e
// a default order of `Sequential', which means that the
' {2 p' i7 w( g& _8 o } // order of iteration through the `heatbugList' will be( r4 |8 m3 u; p, q4 T$ V( s
// identical (assuming the list order is not changed
/ l5 G9 D( y2 y7 V, O \/ o // indirectly by some other process)., ], G4 R+ E4 u4 ^! B% }
0 B2 b) I3 W/ q: q( L modelActions = new ActionGroupImpl (getZone ());
l2 b$ w/ p& u+ m4 [" A9 l' D3 w% @4 v% Y3 F2 G- \2 h3 g
try {8 N2 q3 A3 Y! N3 e
modelActions.createActionTo$message
_5 r# {$ W: W& Q9 d% d, _2 E0 } (heat, new Selector (heat.getClass (), "stepRule", false));5 R" ^. Y5 g+ A7 L) ^
} catch (Exception e) {, l) I& l- F2 G$ F
System.err.println ("Exception stepRule: " + e.getMessage ());
% F! I% W- g! J/ m$ E/ D+ i" z: { }/ v) x4 Q' G! r- I% j! ~
0 M8 k N2 _- O+ c6 q, N- n
try {
; i9 F2 o( O1 Z. s: R! [- B; e% d2 N Heatbug proto = (Heatbug) heatbugList.get (0);
9 M. [& n' A9 p; [$ k1 n# H+ h- ` Selector sel =
6 I9 M8 R) t1 j8 o new Selector (proto.getClass (), "heatbugStep", false);
; M: f1 i8 D7 k: F( t' G8 S actionForEach =
) |9 o' ?% t* D2 I' G! E# B modelActions.createFActionForEachHomogeneous$call
' O* R& p7 ?/ m, W" i4 m (heatbugList,2 g: f+ x5 D0 B9 v8 m! X$ [
new FCallImpl (this, proto, sel,0 k4 J! W4 c* l! X- k, Y) J4 U: E7 G
new FArgumentsImpl (this, sel)));9 s) B* k* W2 @/ P& z1 U/ b$ g
} catch (Exception e) {
8 v2 G, I4 l, N/ }$ \" A3 g5 c e.printStackTrace (System.err);$ K8 @8 ]- C6 @; ?; O0 D* w
}
& s: ^# Y5 A+ X: }
. o& H H1 m5 q7 b" o syncUpdateOrder ();# N* G7 H( X9 j7 o1 F. U8 j
3 O5 Q2 Z3 }1 Z. k: t7 ~; _! X; e1 G try {! } v* ^' p. ^. w
modelActions.createActionTo$message / v/ F# q! h. ?' s. _
(heat, new Selector (heat.getClass (), "updateLattice", false));/ P9 ?& y' ~5 A( G+ ^1 k
} catch (Exception e) {
% |4 A8 L4 R j K$ I" q System.err.println("Exception updateLattice: " + e.getMessage ());
4 S. K; p2 z3 L s1 o8 ` }
' b. Y: a T- f& Y# Z% t! N
n" p& e4 }: R# R // Then we create a schedule that executes the) ]0 Y( K3 f, b0 [: X# ]
// modelActions. modelActions is an ActionGroup, by itself it+ C" m9 |7 S7 m% n% E
// has no notion of time. In order to have it executed in6 R5 E Q) m, s0 D
// time, we create a Schedule that says to use the T! B1 _: V8 q: i
// modelActions ActionGroup at particular times. This; T: x& {6 O# x' ^
// schedule has a repeat interval of 1, it will loop every
, S+ m% i$ k! z // time step. The action is executed at time 0 relative to
2 {/ \# a$ \+ r( v7 D3 ? // the beginning of the loop.0 B$ \( K5 f0 `
7 {+ [" |* g4 G // This is a simple schedule, with only one action that is( D/ f$ L, U) y# u
// just repeated every time. See jmousetrap for more$ z8 `$ C( o2 S9 F3 {
// complicated schedules.1 b7 [8 j( U' i) O
f+ t3 m' |* Z, |( p7 {$ D modelSchedule = new ScheduleImpl (getZone (), 1);
* Q; C( F7 R2 A7 j* C modelSchedule.at$createAction (0, modelActions);
2 n7 ]" g# B5 Q% S0 a) D1 @
% @& k! R5 q5 _7 V( q return this;' _- e3 s/ _; s8 ~8 K& w* ~
} |