HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:, `: |. g. L. u$ e, K- {5 c
$ w: \! I& \3 R. X
public Object buildActions () {3 U: t( H3 r) v' @, \2 W% W N2 c7 B
super.buildActions();9 @- d; C7 [: M" D6 t0 X
/ R0 W: J" b2 Z+ M$ J9 g2 W5 x* F
// Create the list of simulation actions. We put these in
: [0 F( C1 E6 N% Y* w- d; \ // an action group, because we want these actions to be; T6 V3 i% r8 a2 l3 E. [; D# v( a
// executed in a specific order, but these steps should
( R( d1 h: c1 \7 Z( s+ Q# k' Q // take no (simulated) time. The M(foo) means "The message/ S8 }, Z; D: A$ F- f. J
// called <foo>". You can send a message To a particular( A9 q2 y6 L, x1 B
// object, or ForEach object in a collection.
$ ^( @. \! m( q3 P- H% U# D6 p. k( \ J- o0 D0 M5 r- e, C
// Note we update the heatspace in two phases: first run( H) p6 S& k# R$ @" z. ~ X; E- t# N& |
// diffusion, then run "updateWorld" to actually enact the
8 D( O9 \4 q! I // changes the heatbugs have made. The ordering here is
3 o, s4 I1 p' g! Z9 V3 U( m // significant!
: S% k! B# Z2 j( m r, z$ Z/ f
4 r2 d& i8 C4 t2 e // Note also, that with the additional
8 c% q" E, h8 ~" e // `randomizeHeatbugUpdateOrder' Boolean flag we can
' w5 i: E" m3 y# v& k* v // randomize the order in which the bugs actually run" e" v: |/ Y9 K$ w% V8 G: v% w" d1 `6 o3 s
// their step rule. This has the effect of removing any
( u' r# F y& ]% v- K* o // systematic bias in the iteration throught the heatbug/ w n2 ~, C; Z0 ]
// list from timestep to timestep1 B( w f" Z' h% P' Y
+ Z0 S; `/ A- J // By default, all `createActionForEach' modelActions have* O* n- U- Q) z/ P% o
// a default order of `Sequential', which means that the% x W& \/ ], q0 [& k, q
// order of iteration through the `heatbugList' will be: X8 N% ~ ]3 a/ @* e* ?( M
// identical (assuming the list order is not changed+ V2 I8 Z: [, T7 o+ j- ?
// indirectly by some other process).
/ u. c- n3 c& F* Q F 6 L1 ^) v1 G: X+ [
modelActions = new ActionGroupImpl (getZone ());7 V, f: C, u# I, N" P
9 `' O( c N S
try {
/ V4 t9 E) q$ J- t3 F modelActions.createActionTo$message7 u/ E& B0 p8 g
(heat, new Selector (heat.getClass (), "stepRule", false));( P6 m, r# Y/ d" g) d5 w5 C, i$ W
} catch (Exception e) {* E. W% M% G" k) ]+ D6 M- k
System.err.println ("Exception stepRule: " + e.getMessage ());3 B' l; w4 p) h- U" y6 r( R
}" O. W0 M5 ~+ j( @: W
* L& M; R' ~- ~5 E: a' C8 L
try {
7 ~4 \, D" X) u; L Heatbug proto = (Heatbug) heatbugList.get (0);8 Z& f: P9 Z4 a$ [3 `
Selector sel =
- ]; W# H1 H3 C9 \" `, I new Selector (proto.getClass (), "heatbugStep", false);
9 Q, L6 E5 H1 R% b actionForEach =
9 s2 g+ \& i. H0 c: a- p modelActions.createFActionForEachHomogeneous$call" D4 A- l+ S3 t+ m
(heatbugList,( e7 {, `$ f* t3 k4 \ d) U
new FCallImpl (this, proto, sel,6 y- C ?) u5 E
new FArgumentsImpl (this, sel)));/ r% i" _5 N; {
} catch (Exception e) {
) r9 a* j: v) ^, P9 o% q2 P. v e.printStackTrace (System.err);
+ g! w6 x8 u/ I }
: Z |0 X/ { }. o3 T6 b- J
" F+ X7 }- ~- n/ d& B7 K5 ^2 Q* c' D syncUpdateOrder ();: G- `# W2 T' \1 D
- ~! b1 h; I9 F0 b! v try { i* ?' C" _8 \4 B% y- G
modelActions.createActionTo$message / _5 s+ _: ~$ |
(heat, new Selector (heat.getClass (), "updateLattice", false));! X% h( z8 g0 W$ ?
} catch (Exception e) {
6 L0 k8 b) p: U1 H0 y& u# y System.err.println("Exception updateLattice: " + e.getMessage ());
$ c) g* ~; A. W# x) A }
: F8 e$ i% a* q% c S0 j8 m2 \& z6 q
// Then we create a schedule that executes the2 l/ I+ T5 t5 t5 g% V8 R
// modelActions. modelActions is an ActionGroup, by itself it( v% K% U! @$ R
// has no notion of time. In order to have it executed in( {% E# l- y& g" Y# T) m
// time, we create a Schedule that says to use the. G7 O# |8 _* S7 Q
// modelActions ActionGroup at particular times. This
; M; T, B# B8 E) } // schedule has a repeat interval of 1, it will loop every
5 l% Z( `, }8 @ // time step. The action is executed at time 0 relative to
$ [( r# `) O7 W, |- b- w: Q9 A // the beginning of the loop.
8 p+ i8 l. j. f- F0 G# j+ c7 H4 k* Q# R
// This is a simple schedule, with only one action that is
. |2 }' B: f4 D) i // just repeated every time. See jmousetrap for more- V. ?0 F; L" k
// complicated schedules.
1 @! x8 p% t- G/ Q( \" D
4 Y3 L+ `+ K& Y7 V0 n modelSchedule = new ScheduleImpl (getZone (), 1);
# ] V- [3 o# [; U5 K3 _ modelSchedule.at$createAction (0, modelActions);2 Q2 V7 q, Y8 ]
9 R+ [, H# ~4 z
return this;
3 B. ]( y _. h ]" [3 C7 Z } |