HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
9 I$ t' J3 I% c' g
0 v5 E4 b" L- p. N; ? public Object buildActions () {: l" d' x" c, U3 q/ K
super.buildActions();6 [- w8 A9 I$ d7 V6 U
& K, e# k. y3 i. {/ c7 L
// Create the list of simulation actions. We put these in7 e, f, B0 d1 _
// an action group, because we want these actions to be
! C8 S. O$ F4 y i // executed in a specific order, but these steps should5 K$ a) ?) a' Z3 t2 Q3 J5 h0 u
// take no (simulated) time. The M(foo) means "The message1 S& Y& w9 k2 O; Q3 e2 w1 \
// called <foo>". You can send a message To a particular
2 ]" A; ~* H$ A& Y/ Z6 w! j // object, or ForEach object in a collection.
( c8 s+ i' `- }8 w- X8 s
% G- A" y) s. o" w" d7 \ // Note we update the heatspace in two phases: first run1 b. S" W9 A% W, w" K- @3 z5 R" w2 o
// diffusion, then run "updateWorld" to actually enact the
& E4 y. _) I0 H' z. l7 a- T% m! @: \ // changes the heatbugs have made. The ordering here is( _3 X( G% A" C- H7 t( I5 L/ x5 F+ O
// significant!& L9 J+ o0 z7 C0 Q3 E
6 v# R* B. }/ [/ c, k // Note also, that with the additional; W' d) @, m! d# g: P) z, O7 f) Y# z
// `randomizeHeatbugUpdateOrder' Boolean flag we can; D& F& _/ t9 \
// randomize the order in which the bugs actually run
1 }4 U; j5 W2 A$ U( l% {+ v // their step rule. This has the effect of removing any
) _2 V9 I0 `+ n# i& I // systematic bias in the iteration throught the heatbug e# D& m: ?. ~; H3 N
// list from timestep to timestep, ^/ Q( I, l9 o8 [0 [( q# G
) j2 K. t. ^. m0 ^) S
// By default, all `createActionForEach' modelActions have4 _" r8 B; U ]
// a default order of `Sequential', which means that the% N2 s# S. U# ]5 L1 n
// order of iteration through the `heatbugList' will be
0 @4 H+ V7 O& [7 d0 h( |. Q8 ` // identical (assuming the list order is not changed
% K9 @1 R% I, }8 t4 e; e // indirectly by some other process).9 A/ o8 Y" g- b+ T1 S# E* q
/ v: e: \" s- U
modelActions = new ActionGroupImpl (getZone ());
1 F) y, V( o" O$ [6 T) p1 f9 z6 L/ _" b2 j# Y+ M
try {% V; I9 m& Z- \; P+ ]; k
modelActions.createActionTo$message
. B% }( j, u+ N7 Y, c H (heat, new Selector (heat.getClass (), "stepRule", false));+ ~" o9 y4 t% E
} catch (Exception e) {
, v2 g( o/ f& l k# @ System.err.println ("Exception stepRule: " + e.getMessage ());! A/ s: ^9 C5 h$ A* d
}
: ]5 ]3 v7 D- }5 y
3 F( Z+ i1 V- I( f8 \- [ try {
# d5 f E: f/ D- y' e Heatbug proto = (Heatbug) heatbugList.get (0);( }3 ~# l* b1 N6 b
Selector sel = , k# c* |. h+ j: l# I/ [5 M
new Selector (proto.getClass (), "heatbugStep", false);
3 r3 J; L1 r* o# D actionForEach =3 o* ?7 T8 u0 x4 B/ N# I
modelActions.createFActionForEachHomogeneous$call3 B: w; H7 d3 t" `% G9 _
(heatbugList,2 r* k. Z4 {1 j( h6 e5 M
new FCallImpl (this, proto, sel,
) J; q" ?* Y+ E. h new FArgumentsImpl (this, sel)));
) u. N8 I4 x. G } catch (Exception e) {
; F8 `3 Q! k3 P/ v( |) m( a" y e.printStackTrace (System.err);
0 Y/ N( J; f* u1 p. Y, @ }
! D+ u: w3 l1 c$ g3 F 7 s2 G# Z) E5 Q) n0 H! I/ A
syncUpdateOrder ();
; S/ N* P/ ]; C# l! t6 a8 m; s
! C. H1 ~+ W4 n! R- o* n. z try {* g: d0 B5 v5 D) m
modelActions.createActionTo$message ( K9 W. Z, ]6 d) H8 S
(heat, new Selector (heat.getClass (), "updateLattice", false));( P+ ] i6 ^! r/ Z9 J& w; F8 {9 z
} catch (Exception e) {% r, a6 L% N3 @2 w/ T) P, _. j
System.err.println("Exception updateLattice: " + e.getMessage ());+ W8 ]: ^$ t4 B: z) [# _6 O
}
$ ^ J8 {0 q. r : G! R* |% b9 _7 I- g" Z9 b
// Then we create a schedule that executes the9 ]& o6 X$ W/ H9 Z% M- ~
// modelActions. modelActions is an ActionGroup, by itself it
6 @2 N2 ^" F o) E$ Y. X1 v // has no notion of time. In order to have it executed in) E! ` y! F6 ?- h/ g; N
// time, we create a Schedule that says to use the& X0 y. m$ Z D! f
// modelActions ActionGroup at particular times. This
* c* B7 E; R8 l D( s1 g& a // schedule has a repeat interval of 1, it will loop every6 o( a+ |7 T9 \7 f
// time step. The action is executed at time 0 relative to0 e. i- ^6 W0 _& `- o ]
// the beginning of the loop.
* N; E) H, K& c) [
/ E) y( n3 [, b/ Y% l$ x4 O // This is a simple schedule, with only one action that is) ^, y6 f; z( G
// just repeated every time. See jmousetrap for more5 }6 {5 w& ^ U. R3 ?9 g2 |
// complicated schedules./ e c Z" L# X% F& U+ E) M, g" {
0 ^- {4 y# E( N7 K3 k* j7 V
modelSchedule = new ScheduleImpl (getZone (), 1);" `( g4 z: s; n& |
modelSchedule.at$createAction (0, modelActions);
7 O0 r' W! W) \* i* ` + d6 _( ]7 y4 S5 E( K
return this;& O) w' [9 f2 R
} |